Собирайтесь вместе группами - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь собрать все подобные группы в OU.

Внутри OU есть 200 групп. из этих 200 некоторые имеют похожее имя с добавлением -RO, -RW или -Admin в конце.

пример:

TestGroup
TestGroup-Admin
TestGroup-RW

Не каждая группа такая но примерно 50%. Я хочу экспортировать группы, которые похожи на это, и группы, которые не похожи на это, в два разных CSV

Так что я отделю:

TestGroup's
TestGroup-Admin's
TestGroup-RW's

От:

NotTestGroup
DifferentTestGroup-Admin
OtherTestGroup

Я пытаюсь сделать это с помощью оператора if, но я не знаю, с чем сравнивать CannonicalName.

Так что-то вроде:

If ($_.CanonicalName -like "otherCannonicalNameInSameOU" ) {
Export-CSV ".\Groups With Similar Names.csv"
}
Else {
Export-CSV ".\Groups With Disimilar Names.csv"
}

Спасибо Заранее всем за помощь.

1 Ответ

1 голос
/ 22 января 2020

Я не знаю, как вы получили свой список групп. Если мы предполагаем, что у вас есть групповые объекты, хранящиеся в $groups, вы можете сделать что-то вроде следующего:

$targetGroup = '/My Group Name$'
$output = $groups | Group-Object {$_.CanonicalName -replace '^(.*/.*?)(-RW|-RO|-Admin)?$','$1'}
$output | Where Name -match $targetGroup | Select Group |
    Export-Csv -Path CSVWithGroup.csv -NoType
$output | Where Name -notmatch $targetGroup | Select Group |
    Export-Csv -Path CSVWithOtherGroups.csv -NoType

Объяснение:

С Group-Object s Параметр -Property может принимать блок скрипта, вы можете выполнить некоторые манипуляции со значением свойства, чтобы выполнить пользовательскую группировку.

-replace выполняет сопоставление с регулярным выражением, за которым следует замена этого совпадения строкой. ^(.*/.*?)(-RW|-RO|-Admin)?$ - это шаблон регулярного выражения со следующей разбивкой:

  • ^: начало строки
  • (.*/.*?): .* жадно соответствует 0 или более символам. / является буквальным бэкслой sh. .*? соответствует 0 или более символов лениво. () создает группу захвата 1, так как это первая группа в скобках. Это совпадение упоминается в строке замены как $1.
  • (-RW|-RO|-Admin)?: -RW буквально -RW. | является регулярным выражением or. ? соответствует предыдущему символу или группе 0 или 1 раз. ? относится ко всей группе (-RW|-RO|-Admin). () создает группу захвата 2. На совпадение группы захвата 2 в строке замены можно ссылаться как $2, но нам здесь это не нужно.
  • $: Конец строки.

Group-Object выводит объект GroupInfo. Этот объект содержит свойства Count, Name и Group. Count - это количество групп на основе значения -Property, переданного Group-Object. Name - это значение -Property. Group содержит объект (ы), который был первоначально передан в Group-Object. Вот почему мы используем Select Group, чтобы мы могли выводить исходные объекты в этой группе. Каждый Group будет содержать коллекцию этих сгруппированных объектов, которые в конечном итоге будут иметь подмножество $groups.

Поскольку у вас будет несколько сгруппированных объектов внутри $output, вы можете l oop через их, если вы хотите обработать что-то против каждой группы. $output | Foreach-Object { } - это обычный способ l oop через группировки. В блоке сценария Foreach-Object $_.Name будет свойством группы, а $_.Group будет всеми исходными объектами в этой группе.

...