2016-11-14 1 views
0

Я новичок в Powershell и пытаюсь получить повторяющийся результат, совместимый с возможностью использования ConvertTo-Html. У меня есть строка в PSCustomObject, а также некоторые массивы. Я пытаюсь denomalize используя следующие однако заголовок свойство не повторять, как я ожидал бы, как этоPowershell select ignoring column

Редактировать - выход ниже

Title  Comment 
Hello World hello 
Hello World bye 

Отредактировано, как я пропустил последний выберите строку (здесь я ожидаю, что название будет повторяться на каждой строке по мере расширения массива)

$report = @() 
$col1 = @() 
$col1 += "hello" 
$col1 += "bye" 

$col2 = @() 
$col2 += "blue" 
$col2 += "green" 
$col2 += "red" 

$reportinfo = New-Object PSCustomObject 
$reportinfo | Add-Member NoteProperty -name Title -value [String]"Hello World" 
$reportinfo | Add-Member NoteProperty -name Comment -value $col1 
$reportinfo | Add-Member NoteProperty -name Colour -value $col2 
$report += $reportinfo 

$report | select Title -ExpandProperty Comment 

Это возвращает следующие выходные данные

привет

свиданья

Если я использую

Write-Output $report 

Я получаю следующее

Название Комментарий Цвет
----- - ------ ------
[String] Привет World {hello, bye} {blue, green, red}

Я пробовал оба с литой струной и без нее. Любые идеи очень приветствуются.

+0

просто попробовал без [строки]. работает отлично.например: '' $ reportinfo | Add-Member NoteProperty -name Title -value «Hello World» ' – 4c74356b41

+0

моя неудачная пропущенная последняя строка кода - см. Править выше –

+0

ok, я думаю, что получил то, что вы хотите сделать, но я не уверен, что это возможно -of коробки. вам придется подождать, когда кто-нибудь умнее, чем я.) – 4c74356b41

ответ

0

Хорошо, так что основная цель состоит в том, чтобы первый столбец был одинаковой строкой, а затем каждый дополнительный столбец были вашими уникальными данными? есть несколько способов сделать это, но лучший из них, вероятно, будет просто создавать ваши объекты таким образом, а не пытаться переместить все вокруг. Прямо сейчас, когда вы создаете свой объект, вы в основном говорите powershell «Я хочу, чтобы в столбце заголовка« Hello World »я хочу, чтобы столбец комментариев содержал этот массив @ (« hello »,« bye »), и я хочу, чтобы столбец цвета содержат массив @ («синий», «зеленый», «красный»), «а это то, что он делает. существует несколько способов получить созданные объекты, как вы хотите, но я подключил одну из более простых (если медленнее), единственная проблема с этим - вы не сможете использовать гетерогенные массивы (так что вам нужно будет либо добавить новый комментарий или удалить цвет)

$report = @() 
$col1 = @("hello","bye") 
$col2 = @("red","green","blue") 

$i = 0 
foreach($entry in $col1) { 
    $report += [PsCustomObject]@{ 
    Title = "Hello World" 
    Comment = $entry 
    Color = $col2[$i] 
    } 
    $i++ 
} 

Поэтому в основном то, что вы делаете, это цикл через каждую запись в $col1 массива и создание нового объекта для каждого из них с Title собственности «Hello World», a Comment свойство, представляющее любую запись этого массива, и свойство Color, используя любое значение в той же позиции в массиве $col2, которое вы отслеживаете с помощью приращения $ i. Выполнение этого с помощью регулярного цикла FOR, а не forEach, является проблемой квалифицированно более правильный, но синтаксис немного сложнее. (но это было бы легче изменить это, чтобы обрабатывать неравные массивы длины)

for($i = 0; $i -le $col1.count;$i++) { 
    $report += [PsCustomObject]@{ 
    Title = "Hello World" 
    Comment = $col1[$i] 
    Color = $col2[$i] 
    } 
} 

Надежда, что помогает и пожалуйста, оставьте комментарий, если какая-либо часть этого не делает иметь смысл или не будет работать для вашей ситуации.

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

  • Нет связанных вопросов^_^