我尝试删除帐户已被禁用但不确定如何正确组合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
答案 0 :(得分:2)
通常最好还提供您正在操作的数据样本(在这种情况下, users.csv 的内容如下),因为解决问题的关键在于你正在阅读的数据。但是,在这种情况下,我相信我可以看到你在没有看到数据的情况下绊倒你。
请记住,在管道的每个阶段, $ _ 都会设置管道上一个阶段中每个对象的值。 $ _。member 在整个管道中没有一致的值。
在第二阶段,ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member
, $ _。member 评估&#34;成员&#34;的值CSV文件的列。在第三阶段ForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName}
中,它评估从第二阶段传递的组对象的成员属性。这些对象没有成员属性,因此 $ _。member 为空。
您可以做的是将CSV文件(用户名,我假设?)中的值捕获到第一个 ForEach-Object 过滤器开头的变量中,并将其用作< strong> -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中(因为您已经标记了此问题),您根本无法使用裸地名称。