嗨,我对 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-File
或Export-Csv
:
foreach($Group in $GroupList)
{
Get-ADGroupMember $Group -Recursive | Select-Object Name | Sort-Object Name | Out-File "$Group.csv" -Append
}