我是Powershell和Active目录的新手,但却有我想要的一半。我正在尝试输出用户列表的组成员身份。脚本可以做到这一点 - 但是我遇到的问题是我想在其成员资格页面的每一行旁边列出用户名(以及一个逗号或一些分隔符),以便我可以在excel之后更轻松地进行排序。我希望输出
user1,mebershipitem1
user1,membershipitem2
user2,membershipitem1等。
现在我得到
USER1
membershipitem1
membershipitem2
USER2
membershipitem1等。
$myDomain = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
$users = Get-Content $srcfilename
$users | ForEach-Object{
$_ | Out-File $outfilename -Append
foreach ($domain in $myDomain.Forest.Domains)
{
$output = Get-ADPrincipalGroupMembership $_ -server $domain.name | Get-ADGroup -Properties * | select name
}
#Trying to append the username at the beginning of each line of their membership, doesn't work properly
$output = $output | Out-String
$output | foreach-object {$_ + "blah"}
$output | Out-File $outfilename -Append
$output = ''
}
答案 0 :(得分:1)
.memberof
属性可以为您提供用户的组成员身份,而无需调用其他cmdlet。
此外,您可以创建一个powershell对象数组,而不是乱搞输出格式,这样就很容易输出您喜欢或导出到csv的方式。
$col = @()
foreach($user in (Get-ADUser -filter * -Properties memberof )) {
$user.memberof | %{
$object = [PSCustomObject]@{
Name = $user.name
Group = (Get-ADGroup $_ ).name
}
$col+=$object
}
}
$col
$col | Export-Csv -NoTypeInformation c:\somefile.csv
Powershell v3代码,也假设每个用户始终至少有组成员资格,这是一个安全的假设imo。
答案 1 :(得分:0)
另一个答案很可能是更好的方法(阅读我对*
的评论)。如果你只有PowerShell 2.0,或者如果这个脚本只是图片的一小部分,我想用你当前的代码逻辑来展示一种方法。
$users | ForEach-Object{
$singleUser = $_
foreach ($domain in $myDomain.Forest.Domains)
{
Get-ADPrincipalGroupMembership $_ -server $domain.name | Get-ADGroup -Properties * | select -expand name | ForEach-Object{
"$singleUser,$_"
}
}
} | Add-Content $outfilename
这里有很多循环,但我们所做的只是取$singleUser
并将其添加到我们必须遍历每个组成员的输出行。 Add-Content
也将优于Out-File
并默认添加。