【问题标题】:PowerShell script to add computers to group that are not part of another group?PowerShell脚本将计算机添加到不属于另一个组的组?
【发布时间】:2023-03-03 22:49:01
【问题描述】:

我正在尝试整合一个 PS 脚本,以自动将计算机添加到不属于另一个组的安全组。

在这种情况下,将所有不属于 group_a 的计算机添加到 group_b。

这是我试过的..

#get list of computers from group_a
$tpmobjects = Get-ADGroupMember -Identity "group_a" | Select name
#add computers to group_b that are not in group_a
Get-ADComputer -Filter {SamAccountName -notlike $tpmobjects} | Foreach-Object { Add-ADPrincipalGroupMembership -Identity $_.SamAccountName -MemberOf "group_b" }

我得到的错误是......

Get-ADComputer : Type: 'System.Object[]' is not supported for extended attribute 'SamAccountName'.
At line:2 char:1
+ Get-ADComputer -Filter {SamAccountName -notlike $tpmobjects}...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ADComputer], ArgumentException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.GetADComputer

谁有办法做到这一点?

谢谢。

【问题讨论】:

    标签: powershell active-directory automation powershell-3.0


    【解决方案1】:

    发生的情况是Get-ADGroupMember 返回多个对象,而-Filter 参数不支持匹配多个对象。

    有多种解决方法,但最简单的方法是简单地使用 Where-Object 过滤来自 Get-ADGroupMember 的输出:

    $Computers = Get-ADGroupMember group_a |Where-Object {$_.objectClass -eq 'computer'}
    

    你也不需要将Add-ADPrincipalGroupMembership包裹在ForEach-Object中,它接受管道输入,并且ADComputer对象可以直接绑定到-Identity参数没有问题:

    $Computers |Add-ADPrincipalGroupMembership -MemberOf group_a
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-11
      • 1970-01-01
      • 2023-03-30
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多