我想帮助创建简单的脚本。 所有它必须做的是列出组的子组,它不应该是递归的,现在的格式化并不重要。
我创建了脚本,但只要它完成,它会用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
循环中的错误在哪里?
答案 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