Я хочу получить только OU конкретного пользователя.
Пример команды должен отображать, к чему принадлежит пользователь OU JOHN
USERNAME = OU_NAME
Я хочу получить только OU конкретного пользователя.
Пример команды должен отображать, к чему принадлежит пользователь OU JOHN
USERNAME = OU_NAME
Если у вас не установлен модуль AD, вы также можете использовать это. Я нашел это очень полезным, когда запускал сценарии, где мне нужна была AD-информация, но не был установлен модуль AD. :
$strFilter = "(&(objectCategory=User)(samAccountName=$env:username))"
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.Filter = $strFilter
$objPath = $objSearcher.FindOne()
$objUser = $objPath.GetDirectoryEntry()
$strUserHomeDrive = $objUser.sAMAccountName
$DN = $objUser.distinguishedName
$ADVal = [ADSI]"LDAP://$DN"
$WorkOU = $ADVal.Parent
$WorkOU
Теперь $WorkOU
возвращает строку, подобную этой LDAP://OU=userou,OU=userou2,DC=internal,DC=domain,DC=com
которую вы можете отфильтровать любым способом.
Сценарий Get-ADPathname.ps1 предоставляет для этого одну очень простую технику, которая не требует анализа строки:
PS C:\> (Get-ADUser kendyer).DistinguishedName | Get-ADPathname -Format X500Parent
OU=Sales,DC=fabrikam,DC=com
(Разбор строк не является надежным, как указано в статье.)
Это работает для меня:
$user = Get-ADUser -Identity [USERNAME] -Properties CanonicalName
$userOU = ($user.DistinguishedName -split ",",2)[1]
Источник: http://itknowledgeexchange.techtarget.com/powershell/discovering-a-users-ou/
Я использовал скрипт из Laage, но немного изменил его, потому что мы используем «,» в наших именах. После изменения все равно будет работать для имен без ','.
$ user = Get-ADUser -Identity [ИМЯ ПОЛЬЗОВАТЕЛЯ]
$ userOU = ($ user.DistinguishedName -split "=", 3)[- 1]