列出Active Directory中组的所有子组(成员) - Powershell

时间:2014-05-28 14:27:34

标签: powershell loops foreach active-directory-group members

我想帮助创建简单的脚本。 所有它必须做的是列出组的子组,它不应该是递归的,现在的格式化并不重要。

我创建了脚本,但只要它完成,它会用GROUP=$group但不是子组写行。 它应该写:

GROUP=$group 
subgroup 
subgroup 
GROUP=$group 
subgroup

......等等。

Get-ADGroup -filter * -properties GroupCategory | FORMAT-Table -property name -hidetableheaders | Out-File -FilePath "D:\groups_list.txt"
$sourcepath = "D:\groups_list.txt"
$path = "D:\groups.txt"
foreach ($group in get-content $sourcepath) {
Out-File -FilePath $path -InputObject "GROUP= $group" -Append
Get-ADGroupMember $group | FORMAT-Table -property name -hidetableheaders | Out-File -FilePath $path -Append
}

如果我在没有循环的情况下编写脚本,那么一切都很好,所以我认为循环中存在一些我不知道如何修复的问题。

$group = "DEPARTMENT_Finance"
Out-File -FilePath $path -InputObject "GROUP= $group" -Append
Get-ADGroupMember $group | FORMAT-Table -property name -hidetableheaders | Out-File -FilePath $path -Append

循环中的错误在哪里?

1 个答案:

答案 0 :(得分:2)

要添加@TheMadTechnician所说的内容,您应该在select管道和{{1}中使用select-object(或Format-Table)代替Get-ADGroup管道。在编写要归档的组列表时,Get-AdGroupMember会在每行末尾包含大量的空格。它正在格式化一个表,因此即使您只使用一个列,该列也将与最长的组名一样宽,使用空格作为填充来保持列的良好和有序。

基本上,当您重新阅读群组列表时,而不是Format-Table获取"DEPARTMENT_Finance"

"DEPARTMENT_Finance "并不知道修剪空白。

做这样的事情:

Get-AdGroupMember

由于您说您只想列出子组,因此您可能希望向Get-ADGroup -filter * -properties GroupCategory | Select-Object -ExpandProperty name | Out-File -FilePath "D:\groups_list.txt" $sourcepath = "D:\groups_list.txt" $path = "D:\groups.txt" foreach ($group in get-content $sourcepath) { Out-File -FilePath $path -InputObject "GROUP= $group" -Append Get-ADGroupMember $group | Select-Object -ExpandProperty name | Out-File -FilePath $path -Append } 管道添加Where-Object以将输出限制为仅限组对象,如下所示:

Get-AdGroupMember