ADSI查询工作正常,它返回多个用户。
我想从返回的每个对象中选择“名称”和“电子邮件”。
$objSearcher = [adsisearcher] "()"
$objSearcher.searchRoot = [adsi]"LDAP://dc=admin,dc=domain,dc=co,dc=uk"
$objSearcher.Filter = "(sn=Smith)"
$ADSearchResults = $objSearcher.FindAll()
$SelectedValues = $ADSearchResults | ForEach-Object { $_.properties | Select -property mail, name }
$ ADSearchResults.properties.mail 为我提供了电子邮件地址
当我省略'select -properties'时,它将返回所有属性,但是尝试选择某些属性时只返回空值。
答案 0 :(得分:2)
每当使用ADSI时,我发现使用.GetDirectoryEntry()
扩展返回的对象更容易$ADSearchResults.GetDirectoryEntry() | ForEach-Object{
$_.Name
$_.Mail
}
注意:这样做可以让您访问实际对象。因此,可以更改这些值并使用$_.SetInfo()
之类的内容完成更改。这本来是一个警告,但不会导致只读取价值的问题。
听取培根比特的评论以及他删除的答案。如果可用,则应使用Get-Aduser
并使用Active Directory。
从评论中更新
部分问题是所有这些属性都不是字符串而是System.DirectoryServices.PropertyValueCollection
。我们需要将数据输出到自定义对象中吗?让我们尝试一下。
$SelectedValues = $ADSearchResults.GetDirectoryEntry() | ForEach-Object{
New-Object -TypeName PSCustomObject -Property @{
Name = $_.Name.ToString()
Mail = $_.Mail.ToString()
}
}
这种简单的方法使用每个对象toString()
方法来打破对象的数据。请注意,虽然这适用于这些属性,但要小心使用if for other,它可能无法显示正确的结果。实验和调试!
答案 1 :(得分:1)
您是否尝试过添加属性?
$objSearcher.PropertiesToLoad.Add("mail")
$objSearcher.PropertiesToLoad.Add("name")