我也想获得每个组的规范名称。我该怎么做?
这是我的脚本:
Get-ADUser -Filter {Enabled -eq $true} -Properties * | Select displayname ,@{Name="MemberOf";Expression={($_.MemberOf | %{(Get-ADGroup $_).sAMAccountName}) -Join ";"}} | Export-Csv -Path "c:tempusers.csv" -NoTypeInformation -Encoding UTF8
我的输出:
"displayname","MemberOf"
"User01","Group01;Group02;Group03"
我想要的输出:
"displayname","MemberOf"
"User01","Group01;Contoso.com/OU1/OU2;Group02;Contoso.com/OU21/OU52;Group03;Contoso.com/OU1/OU21/OU22"
我同意Mathias的观点,但这就是使用现有代码的方法。绝对建议您只调用需要查询的属性。
Get-ADUser -Filter {Enabled -eq $true} -Properties Displayname,MemberOf |
Select-Object Displayname,
@{
Name="MemberOf"
Expression={
# ($_.MemberOf | ForEach-Object{
# (Get-ADGroup $_ -Properties CanonicalName).CanonicalName
# }) -Join ";"
# You can pipe $_.MemberOf to Get-ADGroup, since it's an array of
# distinguishedNames it should work fine
($_.MemberOf | Get-ADGroup -Properties CanonicalName).CanonicalName -Join ";"
}
} | Export-Csv -Path "c:tempusers.csv" -NoTypeInformation -Encoding UTF8
该代码的替代方案,使用更经典的方法:
$users = Get-ADUser -Filter {Enabled -eq $true} -Properties DisplayName
$result = foreach($user in $users)
{
$params = @{
LDAPFilter = "(member=$($user.DistinguishedName))"
Properties = "CanonicalName"
}
$membership = (Get-ADGroup @params).CanonicalName -join ";"
[pscustomobject]@{
DisplayName = $user.DisplayName
MemberOf = $membership
}
}
$result | Export-Csv -Path "c:tempusers.csv" -NoTypeInformation -Encoding UTF8
首先,当您只需要两个属性时,不应该使用Properties *
然后,-Filter
应该是字符串,而不是脚本块。
只需对您的代码进行少量调整,这就可以工作:
Get-ADUser -Filter "Enabled -eq 'True'" -Properties DisplayName, MemberOf |
Select-Object DisplayName,
@{Name = "MemberOf"; Expression = {
($_.MemberOf | ForEach-Object {
($_ | Get-ADGroup -Properties CanonicalName).CanonicalName -Join ";" })
}
} |
Export-Csv -Path "c:tempusers.csv" -NoTypeInformation -Encoding UTF8
查看您的最新评论,我相信您希望将组名称与组的规范名称一起加入。你可以这样做:
Get-ADUser -Filter "Enabled -eq 'True'" -Properties DisplayName, MemberOf |
Select-Object DisplayName,
@{Name = "MemberOf"; Expression = {
$_.MemberOf | ForEach-Object {
$group = $_ | Get-ADGroup -Properties CanonicalName
'{0};{1}' -f $group.Name, ($group.CanonicalName -join ';')
}
}
} |
Export-Csv -Path "c:tempusers.csv" -NoTypeInformation -Encoding UTF8