Возможно ли иметь переменную после цикла в PowerShell?

#powershell

#powershell

Вопрос:

Мне было интересно, возможно ли иметь переменные после условий, например, когда обычно предложение while было бы таким:

$i = 5
while ($i -le 5) {Write-Host $i; $i }

Но поскольку в моем скрипте так много переменных, я подумал, что, может быть, я мог бы написать переменные в конце кода, чтобы я мог сначала прочитать логику скрипта, а не переменные, что-то в этом роде:

 while ($i -le 5) {Write-Host $i; $i  }  
$i = 10
$Variable2 = 5
...
$Variable100 = 25
  

Комментарии:

1. -1 для вопроса, который не имеет никакого смысла. Пожалуйста, перефразируйте вопрос, добавьте несколько примеров о желаемых и достигнутых результатах.

Ответ №1:

Powershell выполняет строки в вашем скрипте в порядке сверху вниз, за исключением случаев, когда цикл, условие или вызов функции заставляют выполнение перейти в другое место.

Итак, нет, вы не можете инициализировать переменную после ее использования, это просто не имеет смысла.

Вашим решением здесь было бы переместить всю логику внутри одной или нескольких функций, а затем в конце вашего скрипта вы можете инициализировать переменные и вызвать функцию (ы). Это примерно то, о чем вы просите.

Ответ №2:

Вам не нужно явно объявлять переменную в PowerShell, если вы об этом спрашиваете. Переменные, которые не были определены ранее, автоматически определяются и инициализируются значением по умолчанию при первом их использовании.

Однако, в зависимости от того, как используется переменная, вы можете непреднамеренно получить разные переменные с одинаковым именем в разных областях:

 PS C:> function Foo { $i; $i = 23; $i }
PS C:> Foo
23
PS C:> $i = 42
PS C:> $i
42
PS C:> Foo
42
23
PS C:> $i
42
PS C:> function Bar { $i; $global:i = 23; $i }
PS C:> Bar
42
23
PS C:> $i
23  

Кроме того, если вы хотите, чтобы переменная начиналась с определенного значения, вам необходимо инициализировать ее перед использованием. Если у вас есть многочисленные инициализации, вы можете поместить их в отдельный сценарий PowerShell и указать исходный код этого второго сценария в вашем «рабочем» сценарии:

 . 'C:pathtoconfig.ps1'
  

Комментарии:

1. Спасибо за ответ! Но моя проблема заключалась в том, что когда переменная была через некоторое время, предложение не сработало — сказал, что не может найти такую переменную.

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