数组/自定义对象
Arrays / CustomObjects
TL;DR:我正在尝试根据条件构建一个带有 header 的数组,理想情况下看起来像这样。
Name Value Status
Element 1 Value 1 --
Element 2 Value 2 Action Required
Element 3 Value 3 --
我一直在尝试不同的方式,但这是我最近的两次尝试:
这会输出每行的最后一行(因为 $array += $list
在 if..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
下一次尝试使用字符串来存储值,但我没有设法在字符串上放置 header,结果格式不存在。好处是我至少看到了我期望的值,所以我知道条件有效。
$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
知道我哪里出错了吗?
通常的方法是创建具有一组已定义属性的自定义对象列表,如下所示:
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 {'--'}
}}
}
TL;DR:我正在尝试根据条件构建一个带有 header 的数组,理想情况下看起来像这样。
Name Value Status Element 1 Value 1 -- Element 2 Value 2 Action Required Element 3 Value 3 --
我一直在尝试不同的方式,但这是我最近的两次尝试:
这会输出每行的最后一行(因为 $array += $list
在 if..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
下一次尝试使用字符串来存储值,但我没有设法在字符串上放置 header,结果格式不存在。好处是我至少看到了我期望的值,所以我知道条件有效。
$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
知道我哪里出错了吗?
通常的方法是创建具有一组已定义属性的自定义对象列表,如下所示:
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 {'--'}
}}
}