我正在尝试使用通用参数输出变量在一个简单的单行 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}}