Powershell 2.0 - удалить членство в группе для списка отключенных учетных записей

Я пытаюсь удалить членство в группе AD для списка пользователей, чьи учетные записи были отключены, но не уверен, как правильно объединить командлеты. Это моя попытка...

Import-CSV T:\temp\users.csv | ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member | ForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName}}

users.csv (содержимое файла ниже)

member
testuser1
testuser2
testuser3

Я получаю следующее сообщение...

Remove-ADPrincipalGroupMembership : Cannot convert 'Microsoft.ActiveDirectory.Management.ADPropertyValueCollection' to
the type 'Microsoft.ActiveDirectory.Management.ADPrincipal' required by parameter 'Identity'. Specified method is not s
upported.
At line:1 char:160
+ Import-CSV T:\temp\users.csv | ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member | ForEach-Object {R
emove-ADPrincipalGroupMembership -Identity <<<<  $_.member -MemberOf SamAccountName}}
    + CategoryInfo          : InvalidArgument: (:) [Remove-ADPrincipalGroupMembership], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.RemoveADPrincipalGro
   upMembership

1 ответ

Решение

Как правило, хорошей идеей является предоставление образца данных, с которыми вы работаете (в данном случае, как выглядит содержимое файла users.csv), поскольку ключ к решению проблемы может лежать в данных, которые вы читаете. в. Тем не менее, в этом случае я считаю, что я могу видеть, что сбивает вас с толку, не видя данных.

Помните, что на каждом этапе конвейера $_ устанавливает значения каждого из объектов предыдущего этапа конвейера. $_.member не имеет согласованного значения во всем конвейере.

На втором этапе ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member$_.member оценивает значения столбца "member" файла CSV. На третьем этапе ForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName}оценивает свойство Member объектов группы, переданных со второго этапа. Эти объекты не имеют свойства Member, поэтому $_. Member имеет значение null.

Что вы можете сделать, это записать значения из CSV-файла (я полагаю, имена пользователей) в переменную в начале первого фильтра ForEach-Object и использовать это в качестве аргумента-Identity:

Import-Csv T:\temp\users.csv | %{
  $user = $_.member
  Get-ADPrincipalGroupMembership -Identity $user | %{
    Remove-ADPrincipalGroupMembership -Identity $user -MemberOf $_.SamAccountName
  }
}

Также обратите внимание, что аргумент -MemberOf должен быть $_. SamAccountName. В PowerShell 3.0 следующее даст вам свойство SamAccountName каждой группы:

Get-ADPrincipalGroupMembership -Identity $user | % SamAccountName

Однако в скриптовом блоке вам нужно $_. SamAccountName. В PowerShell 2.0 (как вы отметили этот вопрос) вы вообще не можете использовать голые имена свойств.

Другие вопросы по тегам