Выбор текста между строками - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь разобрать текст между строками вывода.

Я пытался использовать -split и подстроку, но я не получаю правильный вывод

Вот входной файл / значения конвейера

Please remove the following Roles:
Role1
Role2

Please remove the following Groups:
Groups1
Groups2

Please remove the following Profiles:
Profiles1
Profiles3
Profiles8

Please remove the following DGroups:
DG1
DG9
DG12

Вот код, который я пробовал

Foreach($input in $file){
#I’ve tried the split and I get too much data after roles
write-host $input.split(':')[1]
#replace gives me too much info after roles
$input.replace('Please remove the following Roles:','')
#this loop will continuously run
do{
$input}
until{$input.contains("please*")}
}

Я ожидаю, что результат выдаст мне Role1 и Role2, затем groups1 и groups2, затем profile1 и profile3 и profile8, затем dg1 и dg9 и dg12, а затем проигнорируют остальные.

У меня проблема в цикле do, я получаю непрерывный цикл. В замен я получаю роли, но я также получаю строку удаления групп.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

[редактировать, поскольку данные примера сильно изменились, предыдущий код не будет работать.]

что он делает ...

  • подделывает чтение в текстовом файле в виде одной многострочной строки
  • разбивает эту многострочную строку на блоки в пустых строках
  • перебирает эти блоки
  • разбивает блок по концам строки
  • получает имя типа из 1-й строки
  • получает элементы из оставшихся строк и сохраняет их в массиве
  • создает [PSCustomObject], который содержит тип цели и список предметов
  • отправляет это в $Results коллекцию
  • получает предметы для одного из целевых типов
    Вы можете заменить Roles одним из других типов - Groups является одним из таких.
  • показывает весь сборник $Results
    этот массив может быть аккуратно экспортирован в CSV при желании.

код ...

# fake reading in a text file as one multiline string
#    in real life, use Get-Content -Raw
$InStuff = @'
Please remove the following Roles:
Role1
Role2

Please remove the following Groups:
Groups1
Groups2

Please remove the following Profiles:
Profiles1
Profiles3
Profiles8

Please remove the following DGroups:
DG1
DG9
DG12
'@

$Results = foreach ($Block in $InStuff -split "`r`n`r`n|`r`r|`n`n")
    {
    $SplitBlock = $Block -split "`r`n|`r|`n"
    $BlockName = $SplitBlock[0].Split(' ')[-1].Trim(':')
    $ItemList = $SplitBlock[1..$SplitBlock.GetUpperBound(0)]

    [PSCustomObject]@{
        TargetType = $BlockName
        TargetList = $ItemList
        }
    }

$Results.Where({$_.TargetType -eq 'Roles'}).TargetList
'=' * 30
$Results

вывод ...

TargetType TargetList
---------- ----------
Roles      {Role1, Role2}
Groups     {Groups1, Groups2}
Profiles   {Profiles1, Profiles3, Profiles8}
DGroups    {DG1, DG9, DG12}
0 голосов
/ 11 июля 2019

$ file -replace '. + (? = Роли: | Группы: | Профили: | DGroups:)'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...