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

时间:2015-01-15 11:06:01

标签: powershell custom-object

我有一个数组:

$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
}

2 个答案:

答案 0 :(得分: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传递到ConvertTo-Html以将列表转换为HTML页面(如果您只想创建HTML表而不是整个HTML页面,请使用参数-Fragment。)< / p>

$results | ConvertTo-Html

更好的方法是像这样管道整个处理:

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

答案 1 :(得分:2)

您没有创建自定义对象,而是创建哈希表。

假设你至少得到了V3:

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