powershell数组字典-动态表格式输出

powershell数组字典-动态表格式输出,powershell,Powershell,这就是我要做的。。。 基本上我有一个数组字典 $data = @{ "123" = @('ABC', 'DEF', 'GHI' ) "234" = @( 'JKL', 'MNO', 'PQR' ) "345" = @( 'STU', 'VWX', 'YZ' ) } $serverArray = @('one

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

$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-loop和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

理想情况下,我可以有一个一、二、三、四、五的服务器阵列,因为它在一个循环中,所以所有的工作都是一样的


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

问题似乎是在创建哈希表的表达式部分时对$s的求值,该表达式部分按字面意思而不是其值

我想试试这个:

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

谢谢-工作得很有魅力!我不知道你可以创建脚本块…我打赌这会不时派上用场!