在 PowerShell 中正确使用 -OutVariable

在 PowerShell 中正确使用 -OutVariable

我正在尝试使用通用参数输出变量在一个简单的单行 PowerShell 命令中,但它并没有按照我想象的方式工作(或者根本没有工作)。

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

我只想返回 3 列,其中第三列是初始Get-Mailbox命令结果的属性。我尝试使用输出变量存储结果以供Select-Object最后在我的命令中使用,但打印结果时该列始终为空。

我不明白输出变量

顺便说一句,Get-Mailbox | Select ArchiveStatus效果很好。

jscott——我将命令简化为以下内容——

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

我明白了真的Get-Mailbox 返回的每一行。它显然没有在$mBoxes多变的。

答案1

实际上,我认为它应该可以工作。你忽略了一个事实,即 -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

答案2

显然我不是误解如何输出变量有效,问题是由于我使用的是 Exchange 命令行管理程序而不是带有 Snapin 的 PowerShell。

下面是一个稍微类似但正确的通用用法示例(尽管有些无聊)——

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

相关内容