0

我有一个数组:

$results =@()

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

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

我知道想要在结果数组上做一些事情,比如转换为 html 。

我可以使用 foreach 和自定义 html 编写来做到这一点,但我想使用 convertto-html ...

PS我可以打印出这样的数据,但只有这个:。

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

2 回答 2

5

自定义对象创建不像您想象的那样工作。编码

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

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

示范:

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

Name    Value
----    -----
A       3
B       -4
A       4
B       -3
A       5
B       -2

PS C:\> $results[0]

Name    Value
----    -----
A       3
B       -4

将您的对象创建更改为:

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

所以你得到所需的对象列表:

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

  A     B
  -     -
  3    -4
  4    -3
  5    -2

PS C:\> $results[0]

  A     B
  -     -
  3    -4

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

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

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

$results | ConvertTo-Html

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

... | ForEach-Object {
  New-Object -Type PSCustomObject -Property @{
    'freePercent' = $freePercent
    'freeGB'      = $freeGB
    'system'      = $system
    'disk'        = $disk
  }
} | ConvertTo-Html
于 2015-01-15T12:28:51.510 回答
2

您不是在创建自定义对象,而是在创建哈希表。

假设您至少拥有 V3:

[PSCustomObject]@{
freePercent = $freePercent
freeGB = $freeGB
system = $system
disk = $disk
}
于 2015-01-15T12:10:55.080 回答