遍历一组 powershell 自定义对象并输出到 html

Iterate through an array of powershell custom objects and output to html

我有一个数组:

$results =@()

然后我通过 wmi 使用自定义逻辑循环并创建我添加到数组中的自定义对象,如下所示:

$item= @{}
$item.freePercent = $freePercent
$item.freeGB = $freeGB
$item.system = $system
$item.disk = $disk
$results += $item

我知道想要结果数组中的一些东西,比如转换为 html .

我可以使用 foreach 和自定义 html 来完成,但我想使用 convertto-html...

P.S。我可以打印出这样的数据,但只有这样:.

foreach($result in $results) {
    $result.freeGB
}

您不是在创建自定义对象,而是在创建哈希 [​​=15=]。

假设您至少有 V3:

[PSCustomObject]@{
freePercent = $freePercent
freeGB = $freeGB
system = $system
disk = $disk
}

自定义对象的创建并不像您想象的那样有效。代码

$item= @{}
$item.freePercent = $freePercent
$item.freeGB = $freeGB
$item.system = $system
$item.disk = $disk

创建一个散列table,而不是自定义对象,因此您正在构建一个散列table列表。

示范:

PS C:\> <b>$results = @()</b>
PS C:\> <b>1..3 | %{</b>
>> <b>$item = @{}</b>
>> <b>$item.A = $_ + 2</b>
>> <b>$item.B = $_ - 5</b>
>> <b>$results += $item</b>
>> <b>}</b>
>>
PS C:\> <b>$结果</b>

名称值
---- -----
一个 3
乙-4
一个 4
乙-3
一个 5
乙-2

PS C:\> <b>$结果[0]</b>

名称值
---- -----
一个 3
B -4

将您的对象创建更改为:

$item = New-Object -Type PSCustomObject -Property @{
          'freePercent' = $freePercent
          'freeGB'      = $freeGB
          'system'      = $system
          'disk'        = $disk
        }
$results += $item

所以你得到了想要的对象列表:

PS C:\> <b>$results = @()</b>
PS C:\> <b>1..3 | %{</b>
>> <b>$item = New-Object -Type PSCustomObject -属性 @{</b>
>> <b>'A' = $_ + 2</b>
>> <b>'B' = $_ - 5</b>
>> v}
>> <b>$results += $item</b>
>> <b>}</b>
>>
PS C:\> <b>$结果</b>

  甲乙
  - -
  3 -4
  4 -3
  5 -2

PS C:\> <b>$结果[0]</b>

  甲乙
  - -
  3 -4

此外,在循环中追加到数组必然会表现不佳。最好只 "echo" 循环内的对象并将结果分配给列表变量:

$results = foreach (...) {
             New-Object -Type PSCustomObject -Property @{
               'freePercent' = $freePercent
               'freeGB'      = $freeGB
               'system'      = $system
               'disk'        = $disk
             }
           }

通过管道将 $results 导入 ConvertTo-Html 以将列表转换为 HTML 页面(如果您只想创建 HTML,请使用参数 -Fragment table 而不是整个 HTML 页)。

$results | ConvertTo-Html

更好的方法是像这样流水线处理整个过程:

... | ForEach-Object {
  New-Object -Type PSCustomObject -Property @{
    'freePercent' = $freePercent
    'freeGB'      = $freeGB
    'system'      = $system
    'disk'        = $disk
  }
} | ConvertTo-Html