Você parece ter sido preso pela propriedade inception
A referência $_.PSObject
fornece acesso a metadados de tempo de execução sobre o objeto em questão, sem necessidade de mexer com isso
$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
Para a propriedade Name
que você deseja, você precisa apenas de uma única execução ForEach-Object. Além disso, como o valor da propriedade Name
é a única coisa em que você realmente está interessado, é possível simplesmente descartar $_.Name.Trim()
no pipeline, em vez de atribuí-lo a $_.Name
ou você pode usar 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
Você pode fazer com o módulo Active-Directory
sozinho, usando a opção -Recursive
, que atende ao mesmo propósito que o ActiveRoles ' -Indirect
.
Em vez de usar o redirecionamento de saída cmd clássico, você deve enviar a saída para Out-File
ou Export-Csv
:
foreach($Group in $GroupList)
{
Get-ADGroupMember $Group -Recursive | Select-Object Name | Sort-Object Name | Out-File "$Group.csv" -Append
}