我试图在我的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)
请在我错误的地方以及需要纠正的地方提供协助?
答案 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
}