Фильтрация членства в группах для копирования от одного пользователя к другому - PullRequest
0 голосов
/ 23 октября 2018

У меня в настоящее время есть рабочий код, который копирует все членство в группах одного пользователя другому, взятый отсюда: Скопировать членство в группе от одного пользователя к другому в 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 голосов
/ 23 октября 2018

Используйте метод .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
...