Powershell 脚本将所有分发组和嵌套组输出到 csv 中

Powershell 脚本将所有分发组和嵌套组输出到 csv 中

嗨,我对 powershell 还很陌生,所以我可能完全搞错了,但我必须将我们公司的所有分发组、其嵌套组以及这些组的用户转储到 csv 或 txt 文件中。到目前为止,我通过以下方式获得了我们分发组的所有名称的列表

Get-DistributionGroup | select name >> goups.csv

然后我尝试通过一个脚本来运行它,该脚本将修剪名称上的空格,并通过 Get-QADGroupMember 命令将每个值传输到管道中,并将其输出到最终的 csv 中。这是我目前所得到的...

Import-Module ActiveDirectory

Add-PSSnapin quest.activeroles.admanagement

$GroupList = Import-Csv groups.csv | ForEach-Object {
$_.PSObject.Properties | ForEach-Object {$_.Name = $_.Name.Trim()}
}

ForEach ($_ in $GroupList){
   $_.Name

 Get-QADGroupMember $_.Name -indirect | sort name >> $_.Name.csv

   }

现在它说“Name”是只读属性。我尝试通过 powershell 将只读设置为 false,但仍然出现相同的错误。我在写这个的时候做错了什么吗?

答案1

你似乎被财产困住了起源

$_.PSObject引用使您可以访问有关该对象的运行时元数据,无需摆弄它

$GroupList = Import-Csv groups.csv | ForEach-Object {
$_.PSObject.Properties | ForEach-Object {$_.Name = $_.Name.Trim()}
}                                           ^
                                            |
                  This is the Name property of the Name NoteProperty from the CSV

对于Name如果需要,您只需要运行一次 ForEach-Object。此外,由于属性的值Name是您真正感兴趣的唯一内容,因此您可以直接将其放入$_.Name.Trim()管道中,而不是将其分配给管道$_.Name,或者您可以使用Select-Object

$GroupList = Import-Csv .\groups.csv | ForEach-Object {
    $_.Name.Trim()
}

$GroupList = Import-Csv .\groups.csv | ForEach-Object {
    $_.Name = $_.Name.Trim()
} | Select-Object -ExpandProperty Name

您可以单独使用Active-Directory模块,使用-Recursive开关,其用途与 ActiveRoles 的相同-Indirect
您不应使用传统的 cmd 输出重定向,而应将输出通过管道传输到Out-FileExport-Csv

foreach($Group in $GroupList)
{
    Get-ADGroupMember $Group -Recursive | Select-Object Name | Sort-Object Name | Out-File "$Group.csv" -Append
}

相关内容