【问题标题】:Powershell select ignoring columnPowershell选择忽略列
【发布时间】:2016-11-14 20:31:22
【问题描述】:

我是 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}

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

【问题讨论】:

  • 刚试过没有[string]。完美运行。像这样:$reportinfo | Add-Member NoteProperty -name Title -value "Hello World"
  • 我的错,错过了最后一行代码 - 请参阅上面的编辑
  • 好的,我想我得到了你想要做的,但我不确定它是否可能开箱即用。您将不得不等待比我更聪明的人;)
  • 您实际上希望如何格式化输出?你希望每个数组都被展平成一个字符串吗?你能告诉我们想要的结果是什么样的吗?
  • 关于预期的(也许是有希望的)期望输出见上文

标签: arrays powershell select pscustomobject


【解决方案1】:

好吧,看起来基本目标是让第一列都是相同的字符串,然后每个附加列都是您的唯一数据,对吗?有几种方法可以做到这一点,但最好的方法可能就是以这种方式创建你的对象,而不是试图移动所有东西。现在,当您创建对象时,您基本上是在告诉 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]
  }
}

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

【讨论】:

    猜你喜欢
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2018-05-04
    • 2011-12-24
    • 2018-06-06
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多