Я пытаюсь использовать общий параметр 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