将两个不同的powershell命令的结果作为单个输出返回

时间:2017-02-13 16:09:14

标签: powershell

我正在尝试获取Exchange数据库状态以及测试Outlook Web服务。

要获取现有Exchange数据库的状态,我有以下代码:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

. .\config.ps1

$body +=Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus | sort @{expression='Status';Descending=$true},@{expression='name';ascending=$true} | ft name,status,contentindexstate | Out-string
Write-Output $body

其中 config.ps1 是我的配置文件,其中包含交换服务器的详细信息

现在,在此之后,我找到了测试Outlook Web服务的命令,其中包含以下内容:

Test-OutlookWebServices -Identity:holly@contoso.com

我想尝试使用分号在powershell中链接命令。但不幸的是,我无法尝试,因为我的环境还没有准备好。

那么,我可以这样做:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

. .\config.ps1

$body +=Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus | sort @{expression='Status';Descending=$true},@{expression='name';ascending=$true} | ft name,status,contentindexstate | Out-string; Test-OutlookWebServices -Identity:holly@contoso.com
Write-Output $body

这是正确的方法吗?如果没有,我应该如何在第一个命令中包含第二个命令才能实现此目的? 我希望结果都存储在 $ body 中并打印出来。

1 个答案:

答案 0 :(得分:1)

通过;分隔的一行中执行多个命令不是链接命令,而是一个接一个地执行它们。将它们放在不同的行上会产生同样的效果。

相反,你应该像第一个命令那样将第二个命令Test-OutlookWebServices -Identity:holly@contoso.com的结果也保存到$body变量:

$body = @();
$body += =Get-MailboxDatabase | Get-MailboxDatabaseCopyStatus | sort @{expression='Status';Descending=$true},@{expression='name';ascending=$true} | ft name,status,contentindexstate | Out-string; 
$body += Test-OutlookWebServices -Identity:holly@contoso.com:
Write-Output $body;

通过这个,您可以通过一个变量$body输出两个命令的结果,这是一个Object[]数组,每个数组项都保存一个命令的响应。