Powershell 和 ActiveDirectory - 尝试输出组中的用户及其成员资格

Powershell & ActiveDirectory - trying to output users in a group and their membership

我是 Powershell 和 Active Directory 的新手,但我想要的一半。我正在尝试输出用户列表的组成员身份。该脚本会这样做 - 但我遇到困难的地方是我想在他们的会员页面的每一行旁边列出用户名(和一个逗号或一些分隔符),这样我以后可以在 excel 中做一些更简单的排序.我希望输出为

user1, mebershipitem1
user1, membershipitem2
user2、membershipitem1 等

现在我刚得到

用户 1
会员项目 1
membershipitem2

用户 2
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 = ''
}

.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。

另一个答案很可能是更好的方法(阅读我对 * 的评论)。如果您只有 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 并默认追加。