是否可以修复脚本#1 以正确显示用户的所有 AD 组,类似于脚本#2 ?
脚本#1 仅显示一个 AD 组:
$AD_ID="YOUR AD SAM"
$AD_user=Get-ADUser -Identity $AD_ID -Properties memberof
$AD_groups=($AD_user.memberof | % { (Get-ADGroup $_).Name; }) -join ';';
$AD_groups.Count
$AD_groups
====上述脚本的结果======
1
DM
但是,脚本#2 正确显示所有 AD 组:
$AD_ID="YOUR AD SAM"
$AD_groups=Get-ADPrincipalGroupMembership -Identity $AD_ID | sort name
$AD_groups.Count
$Groups_In_String=";"
$GroupSize=$AD_groups.Count-1
for ($j=0;$j -le $GroupSize; $j++)
{ $Groups_In_String=$Groups_In_String+$AD_groups.Item($j).name+";"}
$Groups_In_String
======上述脚本的结果======
2
;DM;Domain Users;
我想了解为什么 script#1 不能产生与 script#2 相同的结果
正如评论中所解释的,
Get-ADPrincipalGroupMembership
和.MemberOf
之间的计数差异的原因是因为.MemberOf
集合不会包含用户的PrimaryGroup
(通常是Domain Users
)。
因此,如果您想在代码中使用第一种方法,除了
PrimaryGroup
之外,您还可以简单地查询用户的 MemberOf
,然后连接这些值,但是您应该注意,一旦用户使用该方法,此方法就会失败是不同域中的组的成员。
$AD_ID = 'YOUR AD SAM'
$AD_user = Get-ADUser -Identity $AD_ID -Properties Memberof, PrimaryGroup
$AD_groups = ($AD_user.MemberOf + $AD_user.PrimaryGroup | Get-ADGroup).Name -join ';'
$AD_groups.Count
$AD_groups