将字符串值保存到数组时出现Powershell错误

时间:2017-06-12 21:27:50

标签: arrays string powershell

我试图在我的powershell脚本中保存数组中的一些动态字符串值。根据我的知识,数组索引从0到n开始。因此,我将索引的值初始化为0 $n=0。该数组在第0个位置保存了值,但是在$n=1的下一个foreach循环中,它会出错:

Index was outside the bounds of the array.

我的脚本就像:

$arr = @(100)
$n=0
$sj=Select-String -Path C:\Script\main.dev.json -pattern '".*":' -Allmatches 
foreach($sjt in $sj.Line)
{
 Write-host "n=" $n
 Write-Output $sjt
 $arr[$n] = $sjt
 $s=Select-String -Path C:\Script\$js -pattern '.*"' -Allmatches 
 $n=$n+1
}

输出是:

n= 0
     "Share": "DC1NAS0DEV",
n= 1
     "Volume": "devVol",
Index was outside the bounds of the array.
At C:\Script\fstest.ps1:30 char:2
+  $arr[$n] = $sjt
+  ~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], IndexOutO
   on
    + FullyQualifiedErrorId : System.IndexOutOfRangeException

n= 2
     "DbServer": "10.10.10.dev"
Index was outside the bounds of the array.
At C:\Script\fstest.ps1:30 char:2
+  $arr[$n] = $sjt
+  ~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], IndexOutO
   on
    + FullyQualifiedErrorId : System.IndexOutOfRangeException

这意味着数组在$sjt时成功地将$n=0的值保存在数组中,但在接下来的2次迭代中,当$ n分别为1和2时,它会抛出错误的索引超出界限'。

以下解决方法已经尝试过,一个接一个地组合使用:

$arr = @() or $arr = @(1000)
$arr[$n] = @($sjt)

请在我错误的地方以及需要纠正的地方提供协助?

1 个答案:

答案 0 :(得分:3)

@(100)是一个只包含一个元素100的数组。不是100个元素的数组。您可以使用$array = 0..99创建包含100个元素的数组。但我不认为这就是你想要的。

您可以创建一个空数组,然后向其中添加元素。

$arr = @()
foreach ($sjt in $sj.Line) {
    $arr += $sjt
    $s = Select-String -Path C:\Script\$js -pattern '.*"' -Allmatches 
    $n = $n+1
}

或者(稍微更高效),您可以将变量设置为等于循环的输出并输出值。

$arr = foreach ($sjt in $sj.Line) {
    $sjt
    $s = Select-String -Path C:\Script\$js -pattern '.*"' -Allmatches 
    $n = $n+1
}