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

时间:2014-11-19 06:33:16

标签: powershell

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

$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)的表达式中呢?

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

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

1 个答案:

答案 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"}
}