2016-02-17 7 views
0

Я пишу сценарий и сталкивался с ошибкой, описанной в названии. Мой код ниже. Я попытался даже вывести «$ i», и он показывает ожидаемые значения, поэтому я не уверен, почему он дает мне ошибку. Когда он добирается до строки «Write-Host», он даже не выводит его. Что мне не хватает?Мой скрипт дает ошибку «Индекс был за пределами границ» Powershell

$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] 
} 

Видимо есть еще один пост об этом, но я попробовал предложение, перечисленные в качестве ответа он все еще дает мне ту же ошибку.

+0

Вы ожидали чего-то еще из пустого массива? Пустой массив не имеет никакого действительного индекса для записи или чтения. – PetSerAl

+0

Возможный дубликат [Инициализация массива PowerShell] (http://stackoverflow.com/questions/226596/powershell-array-initialization) – dotnetom

+0

Я думал, что я что-то вводил в массив в «$ LogName [$ I] = Read- Host ... "? – Joseph

ответ

0

Массивы PowerShell имеют фиксированный размер. Поскольку он был создан с длиной нуля, попытка добавить что-либо к нему приводит к ошибке.

Есть конечно много способов решения этой проблемы, но, вероятно, самый простой способ в данном случае использовать ArrayList, который является более гибким, вместо массива:

$LogName = new-object system.collections.arraylist 
1

Правильный ответ должен инициализируйте массив по-другому, который размещен на большинстве сайтов PowerShell. Даже сообщение, предложенное дотнетом, не имело его в качестве основного ответа, а в качестве комментария к основному ответу. В любом случае, правильный способ сделать это:

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

Тогда остальная часть моей петли работала нормально.

Смежные вопросы