Я удалил вашу функцию, потому что она не совсем необходима для этого процесса.Вы можете легко изменить его, чтобы использовать вашу функцию снова.Я также удалил команды dsquery и dsget, потому что в модуле ActiveDirectory есть команды, которые могут получить эту информацию.
$members = Get-ADGroupMember "MyGroupName" -recursive | Select-Object name, SamAccountName
$Output = foreach ($member in $members) {
Get-ADUser -Identity $member.SamAccountName -Properties * |
select Name, SamAccountName, Enabled,
@{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}},
@{n='MemberOf';e={($_.MemberOf |% {Get-ADGroup $_}).SamAccountName -join "; "}}
}
$Output | Export-Csv -Path output.csv -NoTypeInformation
Выбранное свойство MemberOf
вычисляется путем возврата свойства SamAccountName
из вывода Get-ADGroup
и объединение результатов вместе с ;
.Вы можете изменить этого присоединяемого персонажа.По умолчанию отключение объединения объединяет группы с пробелом, поэтому, если группы содержат пробелы, это может привести к путанице.%
это просто псевдоним для ForEach-Object
.Export-Csv
используется для создания выходного файла CSV с разделителями-запятыми (output.csv).
Для всех версий PowerShell (2.0 и выше) вы можете использовать следующее:
$members = Get-ADGroupMember "MyGroupName" -recursive | Select-Object name, SamAccountName
$Output = foreach ($member in $members) {
Get-ADUser -Identity $member.SamAccountName -Properties * |
select Name, SamAccountName, Enabled,
@{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}},
@{n='MemberOf';e={($_.MemberOf |% {Get-ADGroup $_ | Select -Expand SamAccountName}) -join "; "}}
}
$Output | Export-Csv -Path output.csv -NoTypeInformation