2013-05-03 34 views
1

我一直在面对这个问题,它似乎没有结束,希望你能帮助我。活动目录查询返回它不应该的空字段

我在Powershell脚本中针对Active Directory进行LDAP查询。获取正确的这点是我的代码:

$objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=ivegotusers,DC=global,DC=foo,DC=com") 

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher 
$objSearcher.SearchRoot = $objDomain 
$objSearcher.PageSize = 1000 
$objSearcher.Filter = $strFilter 
$objSearcher.SearchScope = "Subtree" 

#Write-Host $objSearcher 

$colProplist = "name", "sn", "whenCreated", "whenChanged", "createTimeStamp", "modifyTimeStamp", "displayName", "mailNickName" 
foreach ($i in $colPropList){ 
    $objSearcher.PropertiesToLoad.Add($i) 
} 

$colResults = $objSearcher.FindAll() 

foreach ($objResult in $colResults){ 
    $objItem = $objResult.Properties; 
    Write-Host -NoNewLine $objItem.name 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.displayName; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.sn; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.whenCreated; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.createTimeStamp; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.whenChanged; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.modifyTimeStamp; 
    Write-Host "|"; 
} 

所以我们应该得到的输出为每个查询匹配行,作为行格式如下: 名称|显示名| SN | whenCreated | createTimeStamp | whenChanged | modifyTimeStamp 对不对?

我检查了ADSI Edit中的数据,很多用户都有这些数据;尽管如此,产量为

name1||sn1|||| 
name2||sn2|||| 
name3||sn3|||| 
name4||sn4|||| 
name5||sn5|||| 

那些相同的用户,而且也并不比seted这两个领域较为单一线。

任何人都可以帮我弄清楚这里发生了什么吗?

注意:由于服务器的设置,我无法使用Powershell上的ActiveDirectory导入。

感谢您的时间! 弗拉德

回答

1

我被这一个被咬前一阵子:你有两个选择:

propertyNames小写:

foreach ($objResult in $colResults){ 
    $objItem = $objResult.Properties; 
    Write-Host -NoNewLine $objItem.name 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.displayname 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.sn; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.whencreated; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.createtimestamp; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.whenchanged; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.modifytimestamp; 
    Write-Host "|"; 
} 

或使用.NET集合Item属性风格的语法:

foreach ($objResult in $colResults){ 
    $objItem = $objResult.Properties; 
    Write-Host -NoNewLine $objItem.name 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem["displayName"] 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem.sn; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem["whenCreated"]; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem["createTimeStamp"]; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem["whenChanged"]; 
    Write-Host -NoNewLine "|"; 
    Write-Host -NoNewLine $objItem["modifyTimeStamp"]; 
    Write-Host "|"; 
} 
+0

不能相信它的工作!只有全部小写的属性名称才有用。当然,我现在想知道如何在自己之前设法不尝试这个。非常感谢你! – Vladimir 2013-05-06 14:05:16

+0

非常欢迎。 – serialhobbyist 2013-05-07 09:50:09