gpt4 book ai didi

arrays - 在 PowerShell 中从对象中选择某些属性

转载 作者:行者123 更新时间:2023-12-02 04:21:55 26 4
gpt4 key购买 nike

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”时,它将返回所有属性,但尝试选择某些属性只会返回空值。

最佳答案

每当使用 ADSI 时,我发现使用 .GetDirectoryEntry() 扩展返回的对象更容易

$ADSearchResults.GetDirectoryEntry() | ForEach-Object{
$_.Name
$_.Mail
}

注意:这样做可以让您访问实际对象。因此可以更改这些值并使用 $_.SetInfo() 之类的内容完成更改。这本来是一个警告,但仅仅读取值不会导致问题。

请注意 Bacon Bits 的评论以及他已删除的答案。如果可用并且您使用的是 Active Directory,则应使用 Get-Aduser

评论更新

部分问题在于所有这些属性都不是字符串,而是 System.DirectoryServices.PropertyValueCollection。也许我们需要将这些数据放入自定义对象中?让我们尝试一下这个。

$SelectedValues = $ADSearchResults.GetDirectoryEntry() | ForEach-Object{
New-Object -TypeName PSCustomObject -Property @{
Name = $_.Name.ToString()
Mail = $_.Mail.ToString()
}
}

这种简单的方法使用每个对象的 toString() 方法将数据从对象中分离出来。请注意,虽然这适用于这些属性,但要小心使用 if 对于其他属性,它可能不会显示正确的结果。实验和调试!

关于arrays - 在 PowerShell 中从对象中选择某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com