Привет, я новичок в 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
}