2015-01-15 2 views
0

У меня есть массив:Итерация через массив Powershell пользовательских объектов и вывода в HTML

$results [email protected]() 

Тогда я цикл с пользовательской логики с помощью WMI и создавать пользовательские объекты, которые я добавить в массив, как это:

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

Я знаю, что хочу, чтобы некоторые вещи на массиве результатов, как конвертация в html.

я могу сделать это с Еогеасп и пользовательские HTML письма, но я хочу использовать ConvertTo-HTML ...

P.S. Я могу распечатать такие данные, но только это :.

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

ответ

4

Пользовательский объект не работает, как вы, кажется, думают. Код

$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-страницы (используйте параметр -Fragment, если вы хотите создать просто HTML-таблица вместо всей HTML-страницы).

$results | ConvertTo-Html 

Еще лучше было бы трубопровода вся ваша обработка, как это:

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

Вы не создаете пользовательский объект, вы создаете хэш-таблицу.

Предполагая, что у вас есть по крайней мере, V3: создание

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

нормально, и после того, как я называю convertot-HTML? – e4rthdog

+0

Просто соедините коллекцию объектов с ConverTo-HTML: $ results | ConvertTo-HTML – mjolinor

Смежные вопросы