PowerShell: Como recuperar uma propriedade específica _exclusivamente_

3

Como posso recuperar uma propriedade específica exclusivamente ?

Estou ciente do cmdlet select-object que parece ser deselegante a esse respeito:

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

Uma versão otimizada seria:

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

Por que a chave -property não está retornando apenas as propriedades inseridas?

    
por Matze 28.01.2015 / 11:15

3 respostas

7

Isso ocorre porque a opção -properties não é uma ferramenta de formatação, mas sim como forma de receber mais informações do que os valores padrão já incluídos.

Do artigo Get-ADOrganizationalUnit .

Specifies the properties of the output object to retrieve from the server. Use this parameter to retrieve properties that are not included in the default set.

Se você deseja formatar sua saída, é melhor continuar com a instrução select-object .

    
por 28.01.2015 / 11:26
6

Você precisaria usar os dois, para especificar quais propriedades recuperar do DC, e quais selecionar e exibir. -Properties * é um potencial gerador de desempenho, pois o DSA precisará retornar o atributo every que possui um valor, incluindo certificados e outros valores binários que talvez você não precise para

Em um script que utiliza os cmdlets do AD, eu usaria o operador splatting ( @ ) e faça o seguinte:

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

Se você fizer isso consistentemente, seus scripts se tornarão muito fáceis de atualizar / editar, já que toda consulta é definida no mesmo formato de leitura legível

Se eu estiver no shell e no mid-oneliner para pensar nas propriedades que preciso, faria algo como (usando Get-ADUser como exemplo):

Get-ADUser username -Properties ($p = "manager","memberOf","cn") |select $p
    
por 28.01.2015 / 22:08
0

Considere também o uso de LDAP ou ADSI link

    
por 28.01.2015 / 13:41