PowerShell:如何以独占方式检索特定属性

PowerShell:如何以独占方式检索特定属性

如何检索特定属性

我知道这个select-objectcmdlet 在这方面似乎不太好:

PS C:\> Get-ADOrganizationalUnit -SearchBase 'OU=Houston,DC=contoso,DC=net' -Filter 'Name -like "SomeOU"' -Properties * | Select-Object Description,Streetaddress,State,postalcode | format-list

优化版本如下:

PS C:\> Get-ADOrganizationalUnit -SearchBase 'OU=Houston,DC=contoso,DC=net' -Filter 'Name -like "SomeOU"' -Properties Description,Streetaddress,State,postalcode

为什么-property开关不单独返回输入的属性?

答案1

这是因为-properties开关不是一个格式化工具,它旨在接收比已包含的默认值更多的信息。

来自获取 ADOrganizationalUnit文章。

指定要从服务器检索的输出对象的属性。使用此参数可检索默认集合中未包含的属性。

如果您想格式化输出,最好坚持使用该select-object语句。

答案2

您需要同时使用两者来指定要取回从 DC 中选择并最终显示哪些。-Properties *这是一个潜在的性能问题,因为 DSA 需要返回每一个具有值的属性,包括证书和其他你可能不需要的二进制值

在使用 AD cmdlet 的脚本中,我将使用溅射运算符 ( @) 并执行以下操作:

$ADSplat = @{
    "SearchBase" = 'OU=Houston,DC=contoso,DC=net'
    "Filter"     = 'Name -eq "SomeOU"'
    "Properties" = "Description","Streetaddress","State","postalcode"
}
$ADOU = Get-ADOrganizationalUnit @ADSplat | Select-Object $ADSplat["Properties"]

如果你始终如一地这样做,你的脚本将变得非常容易更新/编辑,因为每个查询都以相同的可读可哈希格式定义


如果我在 shell 和 oneliner 中间考虑我需要的属性,我会做类似的事情(使用Get-ADUser作为示例):

Get-ADUser username -Properties ($p = "manager","memberOf","cn") |select $p

答案3

相关内容