PowerShell Dictionary of Arrays - 动态表格式输出



这就是我要做的...基本上我有一个数组字典

$data = @{
    "123" = @('ABC',
        'DEF',
        'GHI'
)       
    "234" = @(
        'JKL',
        'MNO',
        'PQR'
    )
    "345" = @( 
         'STU',
         'VWX',
         'YZ'
    )
}
$serverArray = @('one', 'two', 'three')

如果我这样做...

 $alignment = @()
 $alignment += @{label="Type";Expression={$_.name};alignment="left"}
 $alignment += @{label=$serverArray[0];Expression={$_.value[0]};alignment="left"}
 $alignment += @{label=$serverArray[1];Expression={$_.value[1]};alignment="left"}
 $alignment += @{label=$serverArray[2];Expression={$_.value[2]};alignment="left"}
 $data.GetEnumerator() | sort name | Format-Table $alignment -autosize

我得到了正确的所需输出。

    Type   one    two    three
    123    ABC    DEF    GHI
    234    JKL    MNO    PQR
    345    STU    VWX    YZ

我试图做的是使它无论我的$serverArray长度如何,它都会使用适当的列进行格式化。

所以我尝试了几种不同的变体(使用 for 循环和 foreach),但似乎没有任何效果......

$alignment = @()
$alignment += @{label="Type";Expression={$_.name};alignment="left"}
for([int]$s=0; $s -lt $serverArray.length; $s++) {    
    write-output $s
    $alignment += @{label=$serverArray[$s];Expression={$_.value[$s]};alignment="left"}
}
$websites.GetEnumerator() | sort name | Format-Table $alignment -autosize

似乎因为表达式正在存储 - 它从字面上存储$s而不是它当时表示的实际值。

如何让它将实际值存储在表达式中,用于$s(0、1 或 2)?

理想情况下,我可以有一个"一、二、三、四、五"的 serverArray ,因为它处于循环中,所以一切都是一样的。

有什么建议吗?非常感谢您的帮助!

看起来问题是在创建哈希表的表达式部分时对$s的评估,它从字面上获取它而不是它的值。

我会试试这个:

for([int]$s=0; $s -lt $serverArray.length; $s++) {    
    $scr = [scriptblock]::Create('$_.value['+$s+"]")
    $alignment += @{label=$serverArray[$s];Expression=$scr;alignment="left"}
}

最新更新