我试图在一个简单的单线程 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}}