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
4

1 に答える 1

2

問題を解決する鍵は、読み取っているデータにある可能性があるため、操作しているデータのサンプル (この場合はusers.csvの内容がどのように見えるか) も提供することをお勧めします。ただし、この場合、データを見なくても何がつまずいているかがわかると思います。

パイプラインの各ステージで、パイプラインの前のステージからの各オブジェクトの値が$_に設定されることに注意してください。$_.memberには、パイプライン全体で一貫した値がありません。

第 2 段階ではForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member$_.memberは CSV ファイルの「メンバー」列の値に評価されます。第 3 段階では、第 2 段階から渡されたグループ オブジェクトのMemberForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName}プロパティに評価されます。これらのオブジェクトにはMemberプロパティがないため、$_.memberは null です。

あなたができることは、最初のForEach-Objectフィルターの先頭にある変数に CSV ファイル (ユーザー名だと思いますか?) から値をキャプチャし、それを-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 では (この質問にタグを付けたように)、裸のプロパティ名をまったく使用できません。

于 2013-09-04T00:59:25.407 に答える