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

我得到以下

标题注释颜色
----- -------- ------
[String]Hello World {hello, bye} {blue, green, red}

我已经尝试过使用字符串转换和不使用。任何想法将不胜感激。

4

1 回答 1

0

好的,所以看起来基本目标是让第一列都是相同的字符串,然后每个附加列都是您的唯一数据正确吗?有几种方法可以做到这一点,但最好的方法可能就是以这种方式创建你的对象,而不是试图移动所有东西。现在,当您创建对象时,您基本上是在告诉 powershell “我希望标题列说 'Hello World' 我希望评论列包含此数组 @('hello','bye') 并且我希望颜色列包含数组 @('blue','green','red')" 这就是它的作用。有几种方法可以让对象按照你的意愿创建,但我附上了一个更简单(如果更慢)的方法,

$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”的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]
  }
}

希望对您有所帮助,如果其中任何部分没有意义或不适用于您的情况,请发表评论。

于 2016-11-14T23:08:25.460 回答