我正在尝试概述我们的Active Directory用户及其所属的组。
从Java的背景出发,我想我可以只使用嵌套的for循环对用户进行一次遍历,对其他组进行遍历,分别对输出进行管道传输。经过测试,我意识到由于Select cmdlet如何格式化值而导致组无法正确显示的问题。我引用了Split property value in Powershell,但我认为它并不是我要找的东西,因为我需要一种方法来识别用户组关系。在下面的代码中,我有1个循环来测试值。
$user = @(Get-ADUser -Filter * -Properties * | Select DisplayName)
for ($i = 0; $i -le ($user.length - 1); $i += 1) {
$group=@(Get-ADUser -Filter "Name -eq '$user[$i]'" | Get-ADPrincipalGroupMembership | Select name)
echo $user[$i]
echo $group[$i]
}
我使用Identity参数与一个用户进行了测试:
$ group = Get-ADUser -Identity“名字姓氏” | Get-ADPrincipalGroupMembership |选择姓名
这给了我这个输出:
DisplayName
.....................
用户1
<#个丢失的组#>
用户2
用户3...
我注意到在用户之间的空格,该位置应该是该组的值。我进行了一些研究,并相信Select-object cmdlet是问题所在。我为用户使用Select DisplayName,为组使用Select name,但是PowerShell无法解析这两者,因为它们占用了同一列,因此我假设这是主要问题。我想要的应该看起来与此类似:
DisplayName
.....................
用户1
第1组
第2组
第3组
用户2
第1组
第2组
第3组
用户3
...
也许我一直在错误地解决这个问题,但是有没有一种方法可以解决这个问题?
答案 0 :(得分:0)
两次使用Get-ADUser
会降低效率。另外,仅希望使用DisplayName时获取所有属性也会降低效率。尝试这样的事情:
$Users = Get-ADUser -Filter * -Properties DisplayName
foreach ($User in $Users) {
$User.DisplayName
$Groups = $User | Get-ADPrincipalGroupMembership
$Groups.Name
}
我认为您遇到问题的部分原因是echo $group[$i]
。如果用户甚至具有与$i
的值一样多的组成员身份,则将输出单个组。