数组/自定义对象

时间:2016-02-02 07:39:57

标签: arrays powershell powershell-v3.0 pscustomobject

TL; DR:我正在尝试使用基于条件的标头构建一个数组,理想情况下看起来像这样。

Name        Value        Status
Element 1   Value 1      --
Element 2   Value 2      Action Required
Element 3   Value 3      --

我一直在尝试不同的方式,但这是我最近的两次尝试:

这将输出每一行的最后一行(因为$array += $listif..else语句中)。但是当它在if..else之外时,它会出现一个空值。将$list附加到$array似乎对我不起作用(我做错了)。

$array = @()
$list = "" | Select Name,Value,Status
foreach ($row in $worksheet) {
  $row.Psobject.Properties | ? {
    if ($RuleArray -contains $_.Name) {
      $list.Name = $_.Name; 
      $list.Value = $_.Value; 
      $list.Status = "Action Required" 
      $array += $list
    } else {
      $list.Name = $_.Name; 
      $list.Value = $_.Value; 
      $list.Status = "--" 
      $array += $list
    }
  } 
}
Write-Host $array

下一次尝试使用字符串来存储值,但我没有设法在字符串上放置标题,因此格式不存在。好处是我至少看到了我期待的价值,所以我知道情况有效。

$array = @()
$list = New-Object System.Collections.Generic.List[System.String]
foreach ($row in $worksheet) {
  $d = $row.Psobject.Properties | % {
    if ($RuleArray -contains $_.Name) {
      $_.Name; $_.Value; "Action Required`n"
    } else {
      $_.Name; $_.Value; "--`n"
    }
  }
  $list.Add($d)
}
$array = "" | Select Name,Value,Status #hail mary
$array += $list.ToArray()
Write-Host $array 

关于我哪里出错了?

1 个答案:

答案 0 :(得分:0)

通常的方法是使用一组已定义的属性创建自定义对象列表,如下所示:

foreach ($row in $worksheet) {
  $row.Psobject.Properties | ForEach-Object {
    New-Object -Type PSObject -Property @{
      Name   = $_.Name
      Value  = $_.Value
      Status = if ($RuleArray -contains $_.Name) {'Action Required'} else {'--'}
    }
  }
}

或者像这样:

foreach ($row in $worksheet) {
  $row.Psobject.Properties |
    Select-Object Name, Value, @{n='Status';e={
      if ($RuleArray -contains $_.Name) {'Action Required'} else {'--'}
    }}
}