2016-11-14 72 views
0

我是Powershell的新手,並且試圖獲得兼容的重複輸出以便能夠使用ConvertTo-Html。我在PSCustomObject中有一個字符串以及一些數組。我試圖使用到denomalize以下但標題屬性不會重複,我會想到這樣Powershell選擇忽略列

編輯 - 輸出低於

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 

我得到以下

標題評論顏色
----- - ------ ------
[字符串]你好世界{你好,再見} {藍色,綠色,紅色}

我已經嘗試使用字符串轉換和無。任何想法將不勝感激。

+0

只是嘗試沒有[字符串]。完美的作品。像這樣:''$ reportinfo | Add-Member NoteProperty -name Title -value「Hello World」'' – 4c74356b41

+0

我的不好,錯過了最後一行代碼 - 請參閱上面的編輯 –

+0

好吧,我想我得到了你想要做的,但我不確定它可能出局-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陣列中每個項目的循環,並創造了每一個與「Hello World」的一個Title屬性的新對象,一個Comment屬性表示任何數組條目是什麼,以及Color屬性使用任何值在$col2數組中的相同位置,您通過增加$ i跟蹤該數值。使用常規FOR循環執行操作,而不是使用ForEach是prob巧妙地更正確的,但語法是一個比較複雜的。(但它會更容易修改這個處理不等長數組)

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

希望有所幫助,並請發表評論,但其中有一部分不有意義或不適合你的情況。