Como combinar duas saídas Powershell para que o comando # 2 seja executado em cada saída?

2

Eu quero combinar os comandos Get-user e get-casmailbox para que eu possa obter a "Empresa" da primeira saída e "ActiveSyncStatus" na última em uma única saída.

Eu também entendo que eu poderia escrever um loop explícito para gerar os resultados desejados, mas eu acho que uma sintaxe mais compacta é possível usando o $ _. comando (ou similar)

Alguém pode me mostrar o comando que demonstra um Get-CasMailbox que alimenta o segundo comando usando um $ _. propriedade, e finalmente faz um select-object de alguma combinação de atributos entre os comandos?

A razão pela qual eu pergunto é porque muitas vezes eu tenho que juntar comandos dessa maneira, e os loops são explícitos e difíceis para o helpdesk copiar e colar. Eu prefiro ter uma única linha de comando que eles possam colar.

    
por random65537 30.05.2014 / 18:09

2 respostas

6

Toda vez que você usa Write-Host , Jeffrey Snover mata um filhote. Ou é Don Jones? Talvez os dois matem o filhote juntos em algum tipo de cerimônia. Isso seria estranho.

[PS] C:\>"User1", "User2" | % { [PSObject]@{Name=$_; Company=$(Get-User $_).Company; ActiveSyncEnabled=$(Get-CASMailbox $_).ActiveSyncEnabled} }

Name                           Value
----                           -----
Name                           User1
Company                        Contoso
ActiveSyncEnabled              True
Name                           User2
Company                        Woodgrove
ActiveSyncEnabled              True

Editar: ou isto:

[PS] C:\>Foreach($_ In Get-Mailbox) { [PSObject]@{Name=$_; Company=$(Get-User $_).Company; ActiveSyncEnabled=$(Get-CASMailbox $_).ActiveSyncEnabled} }

Os Cmdlets do Exchange surpreendem você com o modo como eles lidam com a entrada de pipeline.

Se você deseja que os objetos de saída pareçam estarem um pouco juntos, você pode adicionar Format-Table no final, antes do final } ... no entanto, cuidado com que Format-* é quase tão ruim quanto Write-Host , na medida em que tem a capacidade de quebrar o objeto da saída, apenas formata a saída como a última coisa que você pretende fazer. Não formate a saída e tente encaminhá-la para outro cmdlet.

    
por 30.05.2014 / 19:44
1

Eu nunca usei PowerShell com Exchange e, como não estou familiarizado com esses cmdlets e suas saídas, acredito que esse forro esteja próximo ao que você está procurando:

Get-User | foreach { $a = $_.property1; $b = Get-CASMailbox -SomeProperty $_.property2; Write-Host "$a | $b" }
    
por 30.05.2014 / 19:38