所以,这就是我想要做的...... 基本上我有一个数组字典
$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)的表达式中呢?
理想情况下,我可以拥有一个服务器阵列,一个,两个,三个,四个,五个"因为它在一个循环中所有工作都是一样的。
有什么建议吗?非常感谢帮助!
答案 0 :(得分:0)
看起来问题是在创建哈希表的表达式部分时对$ s的评估,该表单部分取代了它的值。
我试试这个:
for([int]$s=0; $s -lt $serverArray.length; $s++) {
$scr = [scriptblock]::Create('$_.value['+$s+"]")
$alignment += @{label=$serverArray[$s];Expression=$scr;alignment="left"}
}