Исходящая строка для каждого объекта, эквиваленты Powershell Awk

#powershell

#powershell

Вопрос:

Я долгое время был энтузиастом Bash, пытаясь освоиться с Powershell. Я пытаюсь сделать что-то, что можно было бы легко выполнить с помощью Awk, но, похоже, я не могу найти решение в документации Powershell. По сути, я пытаюсь выбрать третье значение из выходных данных команды, разделенных /

 Get-ADOrganizationalUnit -Properties CanonicalName -Filter * | Select-Object -ExpandProperty CanonicalName | Select-String ".*/Example/.*"

example.local/Example/ExampleOU1
example.local/Example/ExampleOU2
  

Я просто хочу выбрать последнее значение, показанное здесь. В среде Bash это может быть легко выполнено с помощью awk -F "/" '{print $3}' однако я изо всех сил пытаюсь найти эквивалент в Powershell. Я нашел Out-String | %{ $_.Split('/')[2]; }' , что неплохо, но работает только при наличии одного объекта. Я предполагаю, что мне нужно ForEach-Object преобразовать в строку, затем разделить, но я не уверен, как это сделать.

Комментарии:

1. % является псевдонимом для foreach-object . out-string Здесь нет необходимости, если вы выполняете итерацию с использованием конвейера и foreach-object . Простой способ для последнего значения $output -replace '.*/'

2. Я решил, что мои ответы были скорее вредными, чем полезными, поэтому я удалил их.

3. Возможно, вы захотите попробовать пошалить с сохранением выходных данных вашей команды в $ ADObject, а затем возиться с $ ADObject. Каноническое имя, если оно существует. Если он существует, он должен быть массивом строк. Если это массив строк, исходящая строка является излишней.

4. Возможно, Get-ADOrganizationalUnit -Properties CanonicalName -Filter * | Select-Object -Property CanonicalName | ForEach-Object { ($_ -split '/')[2] } Примечание: это непроверено, поскольку мой компьютер не находится в домене.

Ответ №1:

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

 [pscustomobject]@{canonicalname = 'example.local/Example/ExampleOU1'} | 
  % { $_.canonicalname.Split('/')[2] }

ExampleOU1
  

Также есть -split, который использует регулярное выражение:

 [pscustomobject]@{canonicalname = 'example.local/Example/ExampleOU1'} | 
  % { ($_.canonicalname -split '/')[2] }
  

Пути появляются так часто, что для этого есть команда:

 [pscustomobject]@{canonicalname = 'example.local/Example/ExampleOU1'} | 
  % { split-path -leaf $_.canonicalname }