0

我正在尝试删除帐户已被禁用但不确定如何正确组合 cmdlet 的用户列表的 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在整个管道中没有一致的值。

在第二阶段,ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member$ _.member计算为 CSV 文件的“成员”列的值。在第三阶段,ForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName}它评估从第二阶段传递的组对象的成员属性。这些对象没有Member属性,因此$_.member为空。

您可以做的是将 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 中(正如您已标记此问题),您根本不能使用裸属性名称。

于 2013-09-04T00:59:25.407 回答