Я не знаю, как вы получили свой список групп. Если мы предполагаем, что у вас есть групповые объекты, хранящиеся в $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
будет всеми исходными объектами в этой группе.