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

Chr*_*ski 2 powershell exchange exchange-2010

我想组合这些命令Get-userget-casmailbox以便我可以从第一个输出中获取“公司”,并将后者中的“ActiveSyncStatus”合并到一个输出中。

我也明白我可以编写一个显式循环来生成所需的结果,但我认为使用 $_ 可以实现更紧凑的语法。命令(或类似)

有人可以向我展示演示使用 $_ 提供第二个命令的 Get-CasMailbox 的命令吗?属性,最后在命令之间做了一些属性组合的选择对象?

我问的原因是因为我经常必须以这种方式连接命令,而且 for 循环是明确的,而且帮助台难以复制和粘贴。我宁愿有一个可以粘贴的命令行。

Rya*_*ies 6

每次使用 时Write-Host,Jeffrey Snover 都会杀死一只小狗。或者是唐琼斯?也许他们都在某种仪式上一起杀死了小狗。那会很奇怪。

[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
Run Code Online (Sandbox Code Playgroud)

编辑:或者这个:

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

Exchange Cmdlets 处理管道输入的方式让您措手不及。

如果您希望输出对象看起来不那么挤在一起,您可以Format-Table在最后添加一个,就在最后一个之前}......但是,请注意这Format-*几乎和 一样糟糕Write-Host,因为它有能力打破输出,因此仅将输出格式化为您打算做的最后一件事。不要格式化输出,然后尝试将其通过管道传输到另一个 cmdlet。

  • 你可以用`$a=get-mailbox; 来避免`Foreach`。$a | % ...`(顺便说一句,不确定它是否更好......) (2认同)