0

私はPowershellを初めて使用し、ConvertTo-Htmlを使用できるように互換性のある繰り返し出力を取得しようとしています。PSCustomObject といくつかの配列に文字列があります。次を使用して非正規化しようとしていますが、このように期待どおりにタイトルプロパティが繰り返されません

編集- 以下に出力

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

私は次のことを得る

タイトル コメント 色
----- ------- ------
[文字列]Hello World {hello, bye} {blue, green, red}

文字列キャストありとなしの両方を試しました。どんなアイデアでも大歓迎です。

4

1 に答える 1

0

基本的な目標は、最初の列をすべて同じ文字列にして、追加の各列を一意のデータにすることです。正しいですか? これを行うにはいくつかの方法がありますが、最善の方法はおそらく、すべてを動かそうとするのではなく、そのようにオブジェクトを作成することです。現在、オブジェクトを作成するとき、基本的にpowershellに「タイトル列に「Hello World」と表示させたい、コメント列にこの配列@('hello','bye')を含めて、色列に配列 @('blue','green','red')" を含みます。オブジェクトを好きなように作成する方法はいくつかありますが、より単純な (遅い場合) 方法の 1 つを添付しました。

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

したがって、基本的には、配列内のすべてのエントリをループし、「Hello World」のプロパティ、その配列エントリが何であるかを表すプロパティ、および同じ値を使用するプロパティを$col1持つ新しいオブジェクトを作成します。 $i をインクリメントすることで追跡している配列内の位置ForEach ではなく通常の FOR ループで実行する方がおそらくより正確ですが、構文はもう少し複雑です (ただし、これを変更して処理する方が簡単です)。長さの異なる配列)TitleCommentColor$col2

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

それが役に立てば幸いです。コメントの一部が意味をなさないか、状況で機能しない場合は、コメントを残してください。

于 2016-11-14T23:08:25.460 に答える