Powershell select 忽略列

Powershell select ignoring column

我是 Powershell 的新手,正在尝试使重复输出兼容以便能够使用 ConvertTo-Html。我在 PSCustomObject 中有一个字符串以及一些数组。我正在尝试使用以下内容进行非规范化,但是标题 属性 并没有像我期望的那样重复

编辑 - 输出如下

Title        Comment
Hello World  hello
Hello World  bye

Edited 因为我错过了最后 select 行(这里我希望标题在每一行上重复,因为数组扩展)

$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

这个returns下面输出

你好

再见

如果我使用

Write-Output $report

我得到以下内容

标题注释颜色
----- -------- ------
[String]Hello World {你好,再见} {蓝色,绿色,红色}

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

好的,看起来基本目标是让第一列都是相同的字符串,然后每个附加列都是您的唯一数据正确吗?有几种方法可以做到这一点,但最好的方法可能就是以这种方式创建对象,而不是尝试移动所有内容。现在,当您创建对象时,您基本上是在告诉 powershell "I want the title column to say 'Hello World' I want the comment column to contain this array @('hello','bye') and I want the color column to contain the array @('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 属性 of "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]
  }
}

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