Назад | Перейти на главную страницу

Сценарий 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, но все равно дает ту же ошибку. Что-то я сделал не так, когда писал это?

Вы, кажется, попали в ловушку собственности начало

В $_.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
}