Powershell将项目从文本文件添加到二维数组

时间:2018-05-25 15:07:50

标签: powershell

我习惯用java编码,而且我是Powershell的新手。我有一个文本文件,其中包含这样显示的Windows服务器信息。

14.0.3026.27,None,CU7,4229789,SQL Server 2017,0

14.0.3025.34,None,CU6,4101464,SQL Server 2017,0

14.0.3023.8,None,CU5,4092643,SQL Server 2017,0

我正在尝试将此信息转换为二维数组,并希望它看起来像这样。

[14.0.3026.27],[None],[CU7],[4229789],[SQL Server 2017],[0]

[14.0.3025.34],[None],[CU6],[4101464],[SQL Server 2017],[0]

[14.0.3023.8],[None],[CU5],[4092643],[SQL Server 2017],[0]

我的代码是提供此错误消息:

  

无法索引到空数组。在行:9 char:9   + $ array [$ i] [$ j] = $ word   + ~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidOperation:(:) [],RuntimeException       + FullyQualifiedErrorId:NullArray

这是我的代码:

$file = Get-Content "C:\Users\UserName\Desktop\sqlServers.txt"
$array = @(), @()
$i = 0
$j = 0
foreach ($line in $file){    
    $j=0

    foreach ($word in $line.split(",")){
        $array[$i][$j] = $word
        $j+=1
    }
    $i+=1
}

2 个答案:

答案 0 :(得分:1)

PowerShell(和.NET)数组是固定大小的,因此分配给数组边界之外的元素不会增加数组。相反,让PowerShell为您构建阵列。以下将产生你想要的(btw数组,而不是实际的2-d数组)

$result = get-content data.txt | foreach { , ($_ -split ',')}

在此代码中,读取数据将为您提供行,拆分行将为您提供列。诀窍是拆分操作前的逗号。没有它,所有元素都将流式传输到单个平面阵列中。逗号保留嵌套数组,以便获得所需的数组数组。

答案 1 :(得分:0)

由于您的文件以逗号分隔(它是带有.txt扩展名的CSV),您可以使用Import-Csv来创建数组。

您需要手动指定标题,因为示例输入不包含它们。

包含示例标题的代码:

$array = Import-Csv "C:\folder\sqlServers.txt" -Header Version,Something,CU,Number,Product,Another

然后,您可以按索引和属性名称引用项目:

PS > $array[0].CU
CU7

PS > $array[2].Product
SQL Server 2017