在Powershell中创建多个表的联合

时间:2016-05-17 18:30:16

标签: powershell

我尝试在Powershell中创建多个表的联合,以用户友好的格式作为报告输出,类似于SQL中的UNION查询。

我有以下代码:

$ft = @{auto=$true; Property=@("MachineName", "Status", "Name", "DisplayName")}
$hosts = @("svr001", "svr002")
$report = @()
ForEach ($h in $hosts) {
    $results = Get-Service -CN $h -Name MyService
    $report += $results | Format-Table @ft
    # Other things occur here, which is why I'm creating $report for output later.
}
Write-Output $report

此代码的输出如下:

MachineName  Status Name       DisplayName
-----------  ------ ----       -----------
svr001      Running MyService  MyServiceDisplayName



MachineName  Status Name       DisplayName
-----------  ------ ----       -----------
svr002      Running MyService  MyServiceDisplayName

因为您只需添加数组以在Powershell中执行联合(即, $union = @(0, 1, 2) + @(3, 4, 5)),我最初的想法是我应该 得到以下输出:

MachineName  Status Name       DisplayName
-----------  ------ ----       -----------
svr001      Running MyService  MyServiceDisplayName
svr002      Running MyService  MyServiceDisplayName

回想起来,我想我明白为什么我得到这个输出,但是我是 不知道如何从第一个输出示例创建两个表的并集到第二个表中的单个表,并且我无法在网上找到任何可以向我发送正确方向的文档或示例中的任何内容

2 个答案:

答案 0 :(得分:2)

Format-Table移动到最后一个命令。 Format-* cmdlet会创建您无法手动处理的特殊格式对象,因此保存它们毫无意义。将Format-*的结果保存到数组时,您将保存“报告”,这就是输出中有两个表的原因(数组包含两个报告)。

首先收集数据,然后在要显示结果时使用Format-Table

$ft = @{auto=$true; Property=@("MachineName", "Status", "Name", "DisplayName")}
$hosts = @("svr001", "svr002")
$report = @()
ForEach ($h in $hosts) {
    $results = Get-Service -ComputerName $h -Name MyService
    $report += $results
    # Other things occur here, which is why I'm creating $report for output later.
}

#Write-Output is not necessary as it is default behaviour
$report | Format-Table @ft

示例输出(使用wuauserv作为服务名称):

MachineName  Status Name     DisplayName   
-----------  ------ ----     -----------   
localhost   Stopped wuauserv Windows Update
frode-pc    Stopped wuauserv Windows Update

答案 1 :(得分:0)

Get-Service Cmdlet还支持-ComputerName参数的字符串数组。这对我有用:

Get-Service -CN $hosts -Name MyService | Format-Table @ft

使用wuauserv输出示例:

MachineName  Status Name     DisplayName   
-----------  ------ ----     -----------   
Tim-SRV1    Running wuauserv Windows Update
Tim-SRV2    Stopped wuauserv Windows Update