在PowerShell中正确使用-OutVariable

我试图在一个简单的单线程 PowerShell命令中使用Common Parameter OutVariable ,但是这不是我认为它应该(或者真的)的方式工作。

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 Get-Mailbox | Select ArchiveStatus工作得很好。

jscott – 我简化了以下命令 –

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

Get-Mailbox将返回的每一行都为True 。 显然不是在$ mBoxesvariables中存储任何东西。

其实,我认为它应该工作。 你错过了这个事实,即-OutVariable是集合(而不是简单的数组),它的最后一个元素通常是你在之后。

代码为我工作:

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

这就是说 – 我build议使用与添加成员稍微不同的技术。 无法testing性能,但我想它应该比从Get-Mailbox收集整个输出更好…:

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

显然,我并没有误解OutVariable 如何工作的,这个问题是由于我使用Exchangepipe理Shell而不是PowerShell和Snapin。

下面是适当的(虽然是正常的)使用情况的一个类似于一般的例子 –

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