如何将值从 Hash Table 转换为不同的列?

How to transform values from a Hash Table to a different columns?

我是 Power 的新手 Shell 所以我很难理解对某个操作使用哪个命令。

问题: 我有一个散列 table,其中每个参数在组成字段 VALUE 的字符串中可以有 4 个不同的词。例如:

$table:

Name                    Value
-----                   --------
parameter 1             F15 STK15                                                                                                                                                             
parameter 2             STK15
parameter 3             GP F15 STK15

如您所见,table有3个参数,每个参数值都是一个字符串,可以由3个不同的词组成:STK F15和GP。

我真正需要的是在 4 个不同的列中将此散列 table 导出到 EXCEL:

NAME    GP   STK15    F15

所以在EXCEL中会有4列:

NAME          GP    STK15    F15
parameter1    NULL  STK15    F15
and so on.

我不知道该怎么做,管道 | out-GridView 或其他任何东西。

要是能把字符串分成3列就完美了。有人可以帮我吗?

您可以执行以下操作:

$table = @{parameter1="F15 STK15";parameter2="STK15";parameter3="GP F15 STK15"}
$outArray = @()

foreach($entry in $table.GetEnumerator()) {
   $o = new-object PSCustomObject
   $o | Add-Member -notepropertyName "NAME" -notepropertyvalue $entry.name
   "F15","STK15","GP" | % { 
      if($entry.Value -match $_) {
        $o | Add-Member -notepropertyname "$_" -notepropertyvalue "$_"
      }
      else {
        $o | Add-Member -notepropertyname "$_" -notepropertyvalue "NULL"
      }
    }  
    $outArray += ,$o
}   

遍历 table 并检查您要识别的每个数据是否匹配。为 hashtable 中的每个值创建一个自定义对象,并用名称、所需数据以及每个数据是否匹配来填充它。然后将对象追加到数组中。

然后你就有了这样一个对象:

[PS] > $outArray | ft -auto

NAME       F15  STK15 GP
----       ---  ----- --
parameter2 NULL STK15 NULL
parameter1 F15  STK15 NULL
parameter3 F15  STK15 GP

并且您可以将其转换为 csv 格式以导出到 Excel;

[PS] > $outArray | sort -Property NAME | ConvertTo-Csv -NoTypeInformation
"NAME","F15","STK15","GP"
"parameter1","F15","STK15","NULL"
"parameter2","NULL","STK15","NULL"
"parameter3","F15","STK15","GP"