Uso adequado de -OutVariable no PowerShell

1

Estou tentando usar o parâmetro comum OutVariable em um simples comando PowerShell de uma linha, mas ele não está funcionando como eu acho que deveria (ou realmente está).

Get-Mailbox -OutVariable mBoxes | Get-MailboxStatistics | Select-Object DisplayName,TotalItemSize,@{name="ArchiveStatus";Expression={$mBoxes.ArchiveStatus}}

Eu simplesmente quero retornar 3 colunas, com a terceira coluna sendo uma propriedade dos resultados do comando Get-Mailbox inicial. Eu tentei usar OutVariable para armazenar os resultados para uso no meu comando Select-Object no final, mas essa coluna está sempre vazia quando os resultados são impressos.

Não estou entendendo o propósito de OutVariable ?

BTW, Get-Mailbox | Select ArchiveStatus funciona muito bem.

jscott - simplifiquei o comando para o seguinte -

get-mailbox -OutVariable mBoxes | Select-Object @{name="Null?";Expression={$mBoxes -eq $null}}

Eu obtenho True para cada linha que o Get-Mailbox retornaria. É claro que não está armazenando nada na variável $ mBoxes .

    
por pk. 23.05.2012 / 17:14

2 respostas

1

Na verdade, acho que deveria funcionar. Você está perdendo o fato de que -OutVariable é uma coleção (e não um array simples) e é o último elemento que normalmente é o que você procura.

Código que funcionou para mim:

Get-Mailbox -OutVariable mBoxes | Get-MailboxStatistics | 
    select DisplayName, TotalItemSize, @{
         Name = 'ArchiveStatus'
         Expression = { $mBoxes.Item($mBoxes.Count - 1).ArchiveStatus
    }

Dito isto - eu recomendo usar técnica ligeiramente diferente com Add-Member para isso. Não é possível testar o desempenho, mas acho que deve ser melhor do que coletar toda a saída de Get-Mailbox ...:

Get-Mailbox | Foreach-Object { Get-MailboxStatistics -Identity $_ |
    Add-Member -MemberType NoteProperty -Name ArchiveStatus -Value $_.ArchiveStatus -PassThru } |
    select DisplayName, TotalItemSize, ArchiveStatus
    
por 24.05.2012 / 09:49
2

Aparentemente, não foi incomodado com o funcionamento OutVariable , o problema ocorreu porque eu estava usando o Shell de Gerenciamento do Exchange em vez do PowerShell com um Snapin.

Um exemplo genérico um tanto análogo de uso adequado (embora inane) está abaixo -

do-something -OutVariable outVar | do-somethingelse | Select-Object Property1,Property2,@{name="CalculatedProperty";Expression={$outVar.Item($outVar.Count - 1).Property}}
    
por 23.05.2012 / 21:35