将结果输出推送到数组

时间:2019-07-03 09:49:32

标签: powershell powershell-5.0

我正在运行以下scrpt,以从清单中的所有可用服务器列表中返回磁盘容量的结果集。我想附加输出并将它们组合到一个数据集中,以使其易于显示和查询。我知道如何将值附加到具有一列的数组中,但是由于这需要多个列,因此我不确定如何实现这一点。是否可以将输出的结果集附加到数组?

$myarray = @("")
$servers =
   @(
         'SERVER1'
        ,'SERVER2'
        ,'SERVER3'
        ,'SERVER4'
        ,'SERVER5'
        ,'SERVER6'

    )
$wmiQuery = @"
SELECT
    SystemName,Name,DriveType,FileSystem,FreeSpace,Capacity,Label
FROM
    Win32_Volume
"@

Foreach ($server in $servers)
{

        Get-WmiObject -ComputerName $server -Query $wmiQuery| Select-Object @{Name = "Computer"; Expression={$server}},Name,
        Label,
        @{Name = "SizeInGB"; Expression={"{0:N2}"-f ($_.Capacity/1GB)}},
        @{Name = "UsedSizeInGB"; Expression={"{0:N2}"-f (($_.Capacity - $_.FreeSpace)/1GB)}},
        @{Name = "FreeSizeInGB"; Expression={"{0:N2}"-f ($_.FreeSpace/1GB)}},
        @{Name = "FreePerc"; Expression={"{0:N2}"-f (($_.FreeSpace/1GB)/($_.Capacity/1GB))}}|Where-Object FreePerc -LE 0.16|Format-Table

}

2 个答案:

答案 0 :(得分:2)

您可以通过将foreach循环的输出存储到数组来实现此目的。

$servers = @('SERVER1','SERVER2','SERVER3','SERVER4','SERVER5','SERVER6')
$wmiQuery = @"
SELECT
    SystemName,Name,DriveType,FileSystem,FreeSpace,Capacity,Label
FROM
    Win32_Volume
"@
$myarray = Foreach ($server in $servers)
{

    Get-WmiObject -ComputerName $server -Query $wmiQuery |
      Select-Object @{Name = "Computer"; Expression={$server}},Name,Label,
      @{Name = "SizeInGB"; Expression={"{0:N2}"-f ($_.Capacity/1GB)}},
      @{Name = "UsedSizeInGB"; Expression={"{0:N2}"-f (($_.Capacity - $_.FreeSpace)/1GB)}},
      @{Name = "FreeSizeInGB"; Expression={"{0:N2}"-f ($_.FreeSpace/1GB)}},
      @{Name = "FreePerc"; Expression={"{0:N2}"-f (($_.FreeSpace/1GB)/($_.Capacity/1GB))}}|Where-Object FreePerc -LE 0.16

}
$myarray | Format-Table

我从循环中删除了Format-Table,因为您只应在显示最终输出时使用Format-*命令,而不是在将其用于其他处理时使用。 $myarray变量将是一个数组,每个元素都是具有Get-WmiObject查询属性的对象。

答案 1 :(得分:0)

我认为最好的方法是遵循Microsoft this blog post中显示的内容

基本上,您可以创建嵌套的哈希表。所有服务器的一个哈希表,然后嵌套在其中的另一个哈希表以获取值。这是给您的一个小例子:)

$resultsHash = @{
    SERVER1 = @{
        SizeInGB=""
        UsedSizeInGB=""
        FreeSizeInGB=""
        FreePerc=""
    }
    SERVER2 = @{
        SizeInGB=""
        UsedSizeInGB=""
        FreeSizeInGB=""
        FreePerc=""
    }
}