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

Правильное использование -OutVariable в PowerShell

Я пытаюсь использовать общий параметр OutVariable в простой однострочной команде PowerShell, но она работает не так, как я думаю (или вообще не работает).

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

Я просто хочу вернуть 3 столбца, причем третий столбец является свойством результатов начального Get-Mailbox команда. Я пытался использовать OutVariable чтобы сохранить результаты для использования в моем Select-Object в конце, но этот столбец всегда пуст при печати результатов.

Я не понимаю цель OutVariable?

Кстати, Get-Mailbox | Select ArchiveStatus работает нормально.

jscott - я упростил команду до следующего -

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

я получил Правда для каждой строки, возвращаемой Get-Mailbox. Он явно ничего не хранит в $ mBoxes переменная.

Видимо я не было непонимание как OutVariable работал, проблема была связана с тем, что я использовал Exchange Management Shell вместо PowerShell с Snapin.

Несколько аналогичный общий пример правильного (хотя и бессмысленного) использования приведен ниже -

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

На самом деле, я думаю, это должно сработать. Вам не хватает того факта, что -OutVariable - это коллекция (а не простой массив), и последний элемент обычно то, что вам нужно.

Код, который работал у меня:

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

Тем не менее - я рекомендую использовать для этого немного другую технику с Add-Member. Не могу проверить производительность, но я думаю, это должно быть лучше, чем собирать весь вывод из Get-Mailbox ...:

Get-Mailbox | Foreach-Object { Get-MailboxStatistics -Identity $_ |
    Add-Member -MemberType NoteProperty -Name ArchiveStatus -Value $_.ArchiveStatus -PassThru } |
    select DisplayName, TotalItemSize, ArchiveStatus