嗨,我是相当新的PowerShell,所以我可能会做这个完全错误的,但我必须转储我们所有的公司通讯组,他们的嵌套组,和这些组的用户到一个CSV或TXT文件。 到目前为止,我已经完成了所有通讯组名称的列表
Get-DistributionGroup | select name >> goups.csv
并从那里我试图通过脚本来运行它将修剪名称上的空白,并通过Get-QADGroupMember命令pipe道每个值,并输出到最终的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”是一个只读属性。 我已经尝试设置只读为false通过PowerShell,但它仍然给出同样的错误。 写这个的时候有什么错吗?
你似乎一直被财产开始困住
$_.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对象运行。 而且,由于Name属性的值是您真正感兴趣的唯一的东西,您可以在stream水线中放置$_.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具有相同的用途。
您应该将输出传输到Out-File或Export-Csv ,而不是使用经典的cmd输出redirect。
foreach($Group in $GroupList) { Get-ADGroupMember $Group -Recursive | Select-Object Name | Sort-Object Name | Out-File "$Group.csv" -Append }