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
并默认追加。
我是 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
并默认追加。