PowerShell中多维数组经Format-Table输出为何呈列表形式?
问题:PowerShell多维数组用Format-Table输出为何呈列表形式?
列表定义
$tags = 'a','b','c','d','e'
操作流程
$array = New-Object 'object[,]' 3,5 $array[0,0] = $tags[0] $array[0,1] = $tags[1] $array[0,2] = $tags[2] $array[0,3] = $tags[3] $array[0,4] = $tags[4] $array[1,0] = $tags[0] $array[1,1] = $tags[1] $array[1,2] = $tags[2] $array[1,3] = $tags[3] $array[1,4] = $tags[4] $array | Format-Table
预期输出
预期输出应为2行5列的表格,每行包含a、b、c、d、e五个值。
原因及解决方法
PowerShell的多维矩形数组和Format-Table的设计逻辑不匹配:Format-Table是基于对象属性生成列的,它要求输入是一组拥有相同属性的对象——每个对象对应表格的一行,属性对应列。而多维数组本质是单一集合,元素未被封装成带多属性的对象,直接传入Format-Table时,PowerShell无法识别“行-列”对应关系,只能把数组元素拆分成列表形式展示。
要实现预期的表格输出,需把多维数组的每一行转换成自定义对象,示例代码如下:
# 将多维数组的行转换为自定义对象 $tableRows = @() for ($rowIndex = 0; $rowIndex -lt 2; $rowIndex++) { $tableRows += [PSCustomObject]@{ 列1 = $array[$rowIndex, 0] 列2 = $array[$rowIndex, 1] 列3 = $array[$rowIndex, 2] 列4 = $array[$rowIndex, 3] 列5 = $array[$rowIndex, 4] } } # 输出表格 $tableRows | Format-Table -AutoSize
内容的提问来源于stack exchange,提问作者deetle
相关产品推荐
相关产品推荐

