过滤组成员身份以从一个用户复制到另一个用户

时间:2018-10-23 13:51:37

标签: powershell active-directory powershell-v2.0 powershell-v3.0 active-directory-group

我目前有一个工作代码,可以将一个用户的所有组成员身份复制到另一个用户,从这里获取: Copy group membership from one user to another in AD

Get-ADuser $user_to_copy -Properties MemberOf | Select-Object -ExpandProperty MemberOf | Add-ADGroupMember -Members $user_name

我想添加一个过滤器,以防止添加以数字开头的组。

例如:

123_Group-无法添加到新用户。

Group_123-将被添加到新用户。

我一直在玩Where-Object,但是无法使其按我的意愿工作。

| Where-Object {$_.MemberOf -Match '[a-z]*'}

这些组具有“ CN = ...等”在开始时,我尝试也要考虑,但无济于事(没有输出错误,只是我需要/期望的输出)。我不确定我是在犯错误还是应该尝试其他方式。

任何帮助/建议都将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:2)

使用.NET的Char.IsDigit方法检查名称的第一个字符是否为数字:

Get-ADuser $user_to_copy -Properties MemberOf `
  | Select-Object -ExpandProperty MemberOf `
  | Where-Object { -not [System.Char]::IsDigit($_[3]) } `
  | Add-ADGroupMember -Members $user_name

我使用$_[3](第四个字符),因为memberOf属性是distinguishedName的列表,它们都以CN=开头,后跟组名

更新:如果您要过滤掉以某个字符串开头的组,请使用以下命令:

$badstring = "Computer"
Get-ADuser $user_to_copy -Properties MemberOf `
  | Select-Object -ExpandProperty MemberOf `
  | Where-Object { -not $_.Substring(3).StartsWith($badstring) } `
  | Add-ADGroupMember -Members $user_name