Вы действительно спрашиваете о разборе отличительных имен, которые на самом деле не являются простыми строками из-за определенных символов, которые требуют экранирования.
Ваш вопрос действительно: «Как мне удалить лист и получить только родительскую часть отличительного имени?»
Для этого вы можете использовать интерфейс IADsPathname
, предоставляемый Windows. Этот интерфейс предоставляется сценариям через Pathname
COM-объект.
Некоторое время назад я написал модуль PowerShell , который предоставляет интерфейс командлета для объекта Pathname
, который облегчает вызов. В вашем случае вы можете использовать командлет Get-ADName
и просто написать:
Get-ADName "CN=Test,OU=Test,OU=Test,OU=Test,OU=Test,DC=Test,DC=Test" -Format Parent
Эта команда производит вывод:
OU=Test,OU=Test,OU=Test,OU=Test,DC=Test,DC=Test
В качестве расчетного свойства в вашем сценарии вы можете просто добавить следующее:
@{Label = "OU"; Expression = {Get-ADName $_.DistinguishedName -Format Parent}}
Командлет сценария Get-ADName
довольно удобен и экономит много работы при разборе строк отличительных имен.
(Кроме того, модуль также имеет командлет сценария Convert-ADName
, который реализует COM-объект NameTranslate
, который позволяет преобразовывать имена объектов между различными форматами.)
Я считаю, что командлеты сценариев Get-ADName
и Convert-ADName
практически необходимы в самых разных сценариях.