![如何组合两个 Powershell 输出以便在每个输出上运行命令 #2?](https://linux22.com/image/633982/%E5%A6%82%E4%BD%95%E7%BB%84%E5%90%88%E4%B8%A4%E4%B8%AA%20Powershell%20%E8%BE%93%E5%87%BA%E4%BB%A5%E4%BE%BF%E5%9C%A8%E6%AF%8F%E4%B8%AA%E8%BE%93%E5%87%BA%E4%B8%8A%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4%20%232%EF%BC%9F.png)
我想合并这些命令Get-user
,get-casmailbox
以便我可以从第一个输出中获取“公司”,并从后者中获取“ActiveSyncStatus”到一个输出中。
我也知道我可以编写一个显式循环来生成所需的结果,但我认为使用 $_. 命令(或类似命令)可以实现更紧凑的语法
有人可以向我展示一个命令,该命令演示了 Get-CasMailbox 使用 $_. 属性提供第二个命令,并最终在命令之间选择某种属性组合的对象?
我之所以问这个问题,是因为我经常需要以这种方式连接命令,而 for 循环非常明确,帮助台很难复制和粘贴。我更希望他们能粘贴一行命令行。
答案1
每次使用Write-Host
,杰弗里·斯诺弗都会杀死一只小狗。或者是唐·琼斯?也许他们俩在某种仪式上一起杀死小狗。那会很奇怪。
[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 Cmdlets 处理管道输入的方式让你措手不及。
如果您希望输出对象看起来不那么拥挤,您可以Format-Table
在末尾添加一个,就在最后一个}
... 之前。但是,请注意,这Format-*
几乎和 一样糟糕Write-Host
,因为它能够破坏输出的对象性,因此只能将输出格式化作为您打算做的最后一件事。不要格式化输出,然后尝试将其通过管道传输到另一个 cmdlet。
答案2
我从未使用过PowerShell
,Exchange
而且由于我不熟悉这些cmdlet及其输出,我相信这一行代码接近您想要的内容:
Get-User | foreach { $a = $_.property1; $b = Get-CASMailbox -SomeProperty $_.property2; Write-Host "$a | $b" }