如何组合两个Powershell输出以便在每个输出上运行命令#2?

我想结合命令Get-userget-casmailbox以便我可以从第一个输出中获取“Company”,并将后者中的“ActiveSyncStatus”转换为单个输出。

我也明白,我可以写一个显式循环做生成所需的结果,但我认为更简洁的语法是可能的使用$ _。 命令(或类似的)

有人可以给我演示一个Get-CasMailbox的命令,它使用$ _提供第二个命令。 属性,最后做一个select对象的某些组合的属性之间的命令?

我问的原因是因为我经常需要以这种方式join命令,而且对于帮助台复制和粘贴来说循环是明确的和困难的。 我宁愿有一个他们可以粘贴的命令行。

每当你使用Write-Host ,杰弗里·斯诺弗杀死一只小狗。 还是Don Jones? 也许他们在某种仪式上一起杀了小狗。 那会很奇怪

 [PS] C:\>"User1", "User2" | % { [PSObject]@{Name=$_; Company=$(Get-User $_).Company; ActiveSyncEnabled=$(Get-CASMailbox $_).ActiveSyncEnabled} } Name Value ---- ----- Name User1 Company Contoso ActiveSyncEnabled True Name User2 Company Woodgrove ActiveSyncEnabled True 

编辑:或者这个:

 [PS] C:\>Foreach($_ In Get-Mailbox) { [PSObject]@{Name=$_; Company=$(Get-User $_).Company; ActiveSyncEnabled=$(Get-CASMailbox $_).ActiveSyncEnabled} } 

Exchange Cmdlet可以防止他们处理pipe道input的问题。

如果你希望输出对象看起来不那么紧凑,你可以在最后一个末尾添加一个Format-Table ,但是,要注意Format-*Write-Host几乎一样坏,因为它有能力打破输出的对象性,所以只有格式输出是你打算做的最后一件事情。 不要格式化输出,然后尝试将其input到另一个cmdlet中。

我从来没有使用Exchange PowerShell ,因为我不熟悉这些cmdlet和他们的输出,我相信这一class轮是接近你要找的东西:

 Get-User | foreach { $a = $_.property1; $b = Get-CASMailbox -SomeProperty $_.property2; Write-Host "$a | $b" }