Как я могу разделить контент из командной строки - PullRequest
0 голосов
/ 30 апреля 2018

У меня вопрос, как разделить содержимое, запрашиваемое из командной строки в powershell? Я хочу найти все пути OU на моем сервере, чтобы я мог использовать их позже ..

get-aduser -Filter * | Select DistinguishedName | findstr "OU="

OUTPUT
CN=Username1,OU=firma1,DC=bc,DC=local
CN=Username2,OU=firma2,DC=ad,DC=local

and I want only 
OU=firma1,DC=bc,DC=local
OU=firma2,DC=ad,DC=local

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Как насчет использования метода .NET String.Split напрямую

Get-ADUser -Properties DistinguishedName | ForEach-Object {
    $_.DistinguishedName.Split(",", 2)[1]
}

Это разбивает DistinguishedName на две части через запятую (т.е. все до первой запятой и все после) и возвращает только вторую часть (индекс массива [1]).

Я бы, вероятно, добавил Sort-Object и Select-Object -Unique к концу этого.

Стоит прочитать: Get-ADOrganizationalUnit, может быть, это то, что вы на самом деле ищете?


Этот подход аналогичен с оператором PowerShell -split:

$DNs = Get-ADUser -Properties DistinguishedName | Select -ExpandProperty DistinguishedName
$DNs -split ',',2 | where { $_.StartsWith("OU=") }
0 голосов
/ 30 апреля 2018

Это должно работать:

Get-ADUser -Filter * |
    Where-Object { $_.DistinguishedName.IndexOf('OU=') -gt 0 } |
    ForEach-Object { $_.DistinguishedName.Substring($_.DistinguishedName.IndexOf('OU=')) }

Этот код отфильтровывает любые объекты, которые не находятся в OU, включая те, которые находятся во встроенном контейнере Users, например CN=Administrator,CN=Users,DC=bc,DC=local. Вы также можете обрабатывать этих пользователей с помощью оператора if в ForEach-Object.

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