这就是我要做的...基本上我有一个数组字典
$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"}
}