【问题标题】:My script is giving the error "Index was outside bounds of array" Powershell我的脚本给出错误“索引超出数组范围”Powershell
【发布时间】:2016-02-17 20:17:17
【问题描述】:

我正在编写一个脚本并且遇到了标题中描述的错误。我的代码如下。我什至尝试过输出“$i”并且它显示了预期值,所以我不确定它为什么会给我错误。当它到达“Write-Host”行时,它甚至不输出它。我错过了什么?

$LogName = @() #Declaration of an empty array

$NumberOfLogs = Read-Host -Prompt "How many logs do you want to retrieve?" 
for ($i=0
$i -lt $NumberOfLogs
$i++) 
{ 
$j = $i+1
$LogName[$i] = Read-Host -Prompt "Enter name of Log #$j"
Write-Host $LogName[$i]
}

显然还有另一篇关于此的帖子,但我尝试了作为答案列出的建议,但它仍然给我同样的错误。

【问题讨论】:

  • 您是否期待空数组中的其他内容?空数组没有任何有效的索引可供写入或读取。
  • 我以为我在“$LogName[$I] = Read-Host...”行的数组中输入了一些东西?
  • @dotnetom 我查看了你提到的帖子,它建议使用 += 运算符添加元素,我尝试过,它给了我同样的错误。

标签: powershell


【解决方案1】:

正确的答案是以大多数 powershell 网站上发布的不同方式初始化数组。即使是 dotnetom 建议的帖子也没有将其作为主要答案,而是作为对主要答案的评论。无论哪种方式,正确的做法如下:

$NumberOfLogs = Read-Host -Prompt "Enter the number of logs you want"
$LogName = New-Object string[] $NumberOfLogs

然后我的 for 循环的其余部分工作正常。

【讨论】:

    【解决方案2】:

    PowerShell 数组是固定大小的。由于它是用零长度创建的,因此尝试向其添加任何内容都会导致错误。

    当然有很多方法可以解决这个问题,但在这种情况下,最简单的方法可能是使用更灵活的数组列​​表,而不是数组:

    $LogName = new-object system.collections.arraylist
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多