将结果输出推送到数组

Push output of results to an array

我是 运行 下面的脚本,return 来自我们资产中所有可用服务器列表的磁盘容量结果集。我想附加输出并将它们合并到一个数据集中,以便于显示和查询。我知道如何将值附加到具有一列的数组,但是因为这需要多个,所以我不确定如何实现这一点。是否可以将此输出的结果集附加到数组?

$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

}

我认为最好的方法是按照 Microsoft this blog post 中显示的内容进行操作

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

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

您可以通过将 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 查询的属性。