Довольно прямолинейный вопрос: я не уверен, почему свойство «физическогоDeliveryOfficeName» не отображается в моем выпуске. Я читал, что это нестандартное свойство, но я не смог найти способ его добавить. Все работает отлично, за исключением отсутствующего «физическогоDeliveryOfficeName». Спасибо за помощь!Powershell LDAP - physicalDeliveryOfficeName не отображается
$Dom = 'LDAP://OU=XX;DC=XX;DC=local'
$Root = New-Object DirectoryServices.DirectoryEntry $Dom
$selector = New-Object DirectoryServices.DirectorySearcher
$selector.SearchRoot = $root
$selector.pagesize = 1000
$adobj= $selector.findall() | where {$_.properties.objectcategory -match "CN=Person"}
(Get-Content c:\FILENAME.txt) | Foreach-Object `
{ `
foreach ($person in $adobj){
$prop=$person.properties
if ($prop.cn -like "*" + $_.substring(1, 3) + "*")
{
$s1 = $_ -replace $_.substring(0, 4), $prop.cn
$s2 = $s1 -replace "AD_DEPT", $prop.department
$s3 = $s2 -replace "AD_BRANCH", $prop.physicalDeliveryOfficeName
add-content C:\FILENAME2.txt $s3
}
}
}
AD_DEPT и AD_BRANCH просто заполнители в моем исходном файле.
EDIT
Я прочитал ответ JPBlanc и сделал некоторые дополнительные исследования и в конечном итоге с этого рабочего примера. Кажется, что ключ находится в определении свойств для загрузки. Благодаря!
$strFilter = "(&(objectClass=Person)(department=*))"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objOU = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=XX;DC=XX;DC=local")
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objOU
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "OneLevel"
$colProplist = "cn","department","physicaldeliveryofficename"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
remove-item \\SERVER\FTPROOT\FOLDER\FILENAME.MODIFIED
(Get-Content \\SERVER\FTPROOT\FOLDER\FILENAME) | Foreach-Object `
{ `
foreach ($person in $colResults){
$prop = $person.properties
if ($prop.cn -like "*" + $_.substring(1, 3) + "*")
{
$s1 = $_ -replace $_.substring(0, 4), $prop.cn
$s2 = $s1 -replace "AD_DEPT", $prop.department
$s3 = $s2 -replace "AD_BRANCH", $prop.physicaldeliveryofficename
add-content \\SERVER\FTPROOT\FOLDER\FILENAME.MODIFIED $s3
break
}
}
}
Почему бы не использовать AD или Командиры QuestAD? AD: – Tom
@Tom - Это был мой первый раз с Powershell, поэтому я не знаком с Quest AD. Я обязательно проверю это. –
Это того стоит. Эти командлеты довольно прямолинейны. Например: AD: получить-ADUser -Filter * -свойства сп, отдел, physicaldeliveryofficename Quest: Get-qaduser -includedproperties сп, отдел physicaldeliveryofficename – Tom