我的 Windows 帐户myUser
是 Active Directory 分发组的成员myGroup
。我通过此 PowerShell 命令验证了这一点。
(Get-ADUser myUser -Properties MemberOf | select MemberOf).MemberOf `
| Get-ADGroup `
| Select -ExpandProperty Name
但是以下命令均不会显示该 AD 组。
whoami /groups
net user myUser /domain
net group | findstr myGroup
gpresult /r | findstr myGroup
虽然gpresult /r
文档仅显示安全组而不显示分发组,但这似乎是net.exe
或的未记录行为whoami.exe
。
net
和都不能显示分发组,这是真的吗whoami
?或者是该组的其他属性导致它不显示?
我知道这无法针对我的具体组进行验证,但我希望有人知道这一点或可以与他们网络中的分发组进行仔细检查。
whoami
具体显示属于进程安全令牌的组。这就是它的用途——它不像 Get-AD 那样进行目录搜索,而只是转储其自身进程当前拥有的内容。(例如,如果 AD 成员资格已更新,您的进程仍将具有旧令牌,并且 whoami 也会显示在登录时建立的旧信息。)
根据定义,分发组是不进入进程安全令牌的组 - 它们没有 SID 并且仅作为 LDAP 对象存在(供需要 LDAP 组的程序使用,而不会膨胀用户的安全令牌,其大小有限,就像 Kerberos 票证一样) - 因此它们对“whoami”是不可见的。
组策略是使用文件安全 ACL 来应用的,因此它们(和
gpresult
)依赖于与“whoami”相同的进程令牌。至于
net
,它是一个早于 AD 的命令,来自“WinNT 域”时代,如果我没记错的话,分发组在 NT4 域中不存在,因此对于net
使用的旧式 API 是不可见的。(我认为它们起源于 Exchange,后来演变为 AD?)