【问题标题】:Powershell 2.0 - Remove Group Membership for List of Disabled AccountsPowershell 2.0 - 删除禁用帐户列表的组成员身份
【发布时间】:2013-08-30 00:06:07
【问题描述】:

我正在尝试删除帐户已被禁用但不确定如何正确组合 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

【问题讨论】:

    标签: powershell powershell-2.0 activedirectorymembership group-membership


    【解决方案1】:

    最好还提供您正在操作的数据样本(在这种情况下,users.csv 的内容是什么样的),因为解决问题的关键是问题可能出在您正在读取的数据中。但是,在这种情况下,我相信我可以在没有看到数据的情况下看到是什么绊倒了您。

    请记住,在管道的每个阶段,$_ 都设置了管道前一阶段的每个对象的值。 $_.member 在整个管道中没有一致的值。

    在第二阶段,ForEach-Object {Get-ADPrincipalGroupMembership -Identity $_.member$_.member 评估为 CSV 文件的“成员”列的值。在第三阶段,ForEach-Object {Remove-ADPrincipalGroupMembership -Identity $_.member -MemberOf SamAccountName},它评估从第二阶段传递的组对象的 Member 属性。这些对象没有 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 中(正如您已标记此问题),您根本不能使用裸属性名称。

    【讨论】:

    • 太棒了!那行得通!并且,感谢您的明确解释。
    • 如果正在寻找相同的解决方案,请使用 users.csv 更新上面的帖子以供其他人参考。谢谢,阿迪因巴
    • @user2731132 每当您的问题在 StackOverflow 得到回答时,而不是发布 cmets 感谢回答者(通常最终会被 mods 删除),请将最能解决问题的答案标记为“已接受”单击答案左侧的绿色复选标记:meta.stackoverflow.com/help/someone-answers。此外,当您接受答案时,您获得 +2 代表。 ;)
    • 好的,谢谢。正在寻找接受答案的按钮。单击复选标记当然要容易得多。仍在学习浏览网站。
    猜你喜欢
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多