为什么 Get-ADUser -Identity $AD_ID -Properties memberof 缺少一个 AD 组?

问题描述 投票:0回答:1

是否可以修复脚本#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 相同的结果

powershell active-directory
1个回答
0
投票

正如评论中所解释的,

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
© www.soinside.com 2019 - 2024. All rights reserved.