![PowerShell:如何以独占方式检索特定属性](https://linux22.com/image/650709/PowerShell%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BB%A5%E7%8B%AC%E5%8D%A0%E6%96%B9%E5%BC%8F%E6%A3%80%E7%B4%A2%E7%89%B9%E5%AE%9A%E5%B1%9E%E6%80%A7.png)
如何检索特定属性只?
我知道这个select-object
cmdlet 在这方面似乎不太好:
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
开关不是一个格式化工具,它旨在接收比已包含的默认值更多的信息。
指定要从服务器检索的输出对象的属性。使用此参数可检索默认集合中未包含的属性。
如果您想格式化输出,最好坚持使用该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