从 PowerShell 中的对象中选择某些属性
Selecting certain properties from an object in PowerShell
ADSI 查询工作正常,它 return 多个用户。
我想 select 'name' 和 'email' 来自 returned 的每个对象。
$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' 时,它将 return 所有属性,但尝试 select 某些属性返回时只有空值。
每当使用 ADSI 时,我发现使用 .GetDirectoryEntry()
扩展返回的对象更容易
$ADSearchResults.GetDirectoryEntry() | ForEach-Object{
$_.Name
$_.Mail
}
注意:这样做可以让您访问实际对象。因此可以更改这些值并使用 $_.SetInfo()
之类的内容完成更改。这本来是一个警告,但不会导致仅读取值的问题。
注意 Bacon Bits 的评论以及他已删除的答案。如果可用并且您正在使用 Active Directory,您应该使用 Get-Aduser
。
根据评论更新
部分问题是所有这些属性都不是字符串,而是 System.DirectoryServices.PropertyValueCollection
s。我们可能需要将该数据输出到自定义对象中?让我们试试这个。
$SelectedValues = $ADSearchResults.GetDirectoryEntry() | ForEach-Object{
New-Object -TypeName PSCustomObject -Property @{
Name = $_.Name.ToString()
Mail = $_.Mail.ToString()
}
}
这种简单的方法使用每个对象 toString()
方法将数据从对象中分离出来。请注意,虽然这适用于这些属性,但对其他属性使用 if 时要小心,它可能不会显示正确的结果。实验和调试!
您尝试过添加属性吗?
$objSearcher.PropertiesToLoad.Add("mail")
$objSearcher.PropertiesToLoad.Add("name")
ADSI 查询工作正常,它 return 多个用户。
我想 select 'name' 和 'email' 来自 returned 的每个对象。
$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' 时,它将 return 所有属性,但尝试 select 某些属性返回时只有空值。
每当使用 ADSI 时,我发现使用 .GetDirectoryEntry()
扩展返回的对象更容易$ADSearchResults.GetDirectoryEntry() | ForEach-Object{
$_.Name
$_.Mail
}
注意:这样做可以让您访问实际对象。因此可以更改这些值并使用 $_.SetInfo()
之类的内容完成更改。这本来是一个警告,但不会导致仅读取值的问题。
注意 Bacon Bits 的评论以及他已删除的答案。如果可用并且您正在使用 Active Directory,您应该使用 Get-Aduser
。
根据评论更新
部分问题是所有这些属性都不是字符串,而是 System.DirectoryServices.PropertyValueCollection
s。我们可能需要将该数据输出到自定义对象中?让我们试试这个。
$SelectedValues = $ADSearchResults.GetDirectoryEntry() | ForEach-Object{
New-Object -TypeName PSCustomObject -Property @{
Name = $_.Name.ToString()
Mail = $_.Mail.ToString()
}
}
这种简单的方法使用每个对象 toString()
方法将数据从对象中分离出来。请注意,虽然这适用于这些属性,但对其他属性使用 if 时要小心,它可能不会显示正确的结果。实验和调试!
您尝试过添加属性吗?
$objSearcher.PropertiesToLoad.Add("mail")
$objSearcher.PropertiesToLoad.Add("name")