Назад | Перейти на главную страницу

PowerShell: как получить конкретное свойство _эксклюзивно_

Как я могу получить определенное свойство исключительно?

Я знаю о select-object командлет, который в этом отношении кажется неаккуратным:

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 переключатель не только возвращает введенные свойства?

Это потому, что -properties switch не является инструментом форматирования, он предназначен для получения большего количества информации, чем уже включенные значения по умолчанию.

Из Get-ADOrganizationalUnit статья.

Задает свойства выходного объекта для получения с сервера. Используйте этот параметр для получения свойств, которые не включены в набор по умолчанию.

Если вы хотите отформатировать свой вывод, вам лучше придерживаться select-object заявление.

Вам нужно будет использовать оба, чтобы указать, какие свойства нужно получить из DC, и какие из них выбрать и в конечном итоге отобразить. -Properties * потенциально может снизить производительность, поскольку DSA нужно будет вернуть каждый атрибут, имеющий значение, включая сертификаты и другие двоичные значения, которые могут вам не понадобиться

В сценарии, использующем командлеты AD, я бы использовал брызги оператор (@) и сделайте следующее:

$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"]

Если вы будете делать это последовательно, ваши скрипты станет очень легко обновлять / редактировать, поскольку каждый запрос определяется в одном и том же удобочитаемом и стабильном формате.


Если я нахожусь в оболочке, а средний пользователь задумывается о необходимых мне свойствах, я бы сделал что-то вроде (используя Get-ADUser Например):

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

Также рассмотрите возможность использования LDAP или ADSI http://blogs.technet.com/b/heyscriptingguy/archive/2010/12/01/use-powershell-to-query-active-directory-from-the-console.aspx