我目前有一个工作代码,可以将一个用户的所有组成员身份复制到另一个用户,从这里获取: 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 = ...等”在开始时,我尝试也要考虑,但无济于事(没有输出错误,只是我需要/期望的输出)。我不确定我是在犯错误还是应该尝试其他方式。
任何帮助/建议都将不胜感激。
谢谢。
答案 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