Фильтрация членства в группах для копирования от одного пользователя к другому

В настоящее время у меня есть рабочий код, который копирует все членство в группах одного пользователя другому, взятое отсюда: Копировать членство в группе от одного пользователя к другому в 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=... etc." в начале, который я также пытался учитывать, но безрезультатно (без ошибок вывода, просто не тот результат, который мне нужен/ожидается). Я не уверен, что я просто ошибаюсь или должен пытаться сделать это по-другому.

Любая помощь/совет приветствуется.

Спасибо.




Ответы (1)


Используйте метод .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
person Gabriel Luci    schedule 23.10.2018
comment
Это отлично работает для того, что я хотел, спасибо. Однако как можно фильтровать дальше первого символа, например, группу, начинающуюся с определенной строки, такой как «Компьютер» или «Январь»? (Я надеялся использовать что-то вроде регулярного выражения, чтобы иметь возможность изменить это для других требований). - person Jimmy; 23.10.2018
comment
Замечательно, большое спасибо - это полностью проясняет мое замешательство! - person Jimmy; 23.10.2018