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

列出Active Directory-Powershell中组的所有子组(成员),powershell,loops,foreach,active-directory-group,members,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 -hidetab

我想得到帮助来创建简单的脚本。 它所要做的就是列出组的子组,它甚至不应该是递归的,现在格式化并不是那么重要

我创建了脚本,但它所做的一切,都是用
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

循环中的错误在哪里?

要补充@TheMadTechnician所说的内容,您应该在
获取ADGroup
管道和
获取AdGroupMember
管道中使用
选择
(或
选择对象
)而不是
格式表
。将组列表写入文件时,
Format Table
会在每行末尾插入大量空格。它正在格式化一个表,因此即使您只使用一个列,该列也将与最长的组名一样宽,使用空格作为填充符以保持列的整洁有序

基本上,当您重新阅读组列表时,您得到的不是
“部门财务”
,而是
“部门财务”

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
}
因为您说过只想列出子组,所以您可能想在
Get-AdGroupMember
管道中添加一个
Where-Object
,将输出限制为仅对组对象,如下所示:

Get-ADGroupMember $group | Where-Object objectClass -eq "group" | Select-Object -ExpandProperty name | Out-File -FilePath $path -Append

尝试运行脚本而不将ADGroupMember绑定到任何内容。我怀疑你没有得到你期望的结果。你需要的大部分都在我对你最后一个问题的回答中<代码>获取ADGroupMember$Group |?{$|.objectClass-eq“Group”}选择-扩展名称|输出文件$path-append这是更好的格式,谢谢。但还是同一个问题,当我把它放到foreach循环中时,我得到的只是主组的名称,而不是子组的名称。当我删除foreach并手动放置组名时,它工作得很好。谢谢,这是一个修剪问题。