Стоит ли использовать строгий режим для сценариев PowerShell?

Опубликовано: 14 Марта, 2023
Стоит ли использовать строгий режим для сценариев PowerShell?

Microsoft создала строгий режим для PowerShell, чтобы обеспечить использование передовых методов кодирования. Без Strict Mode можно создавать сценарии, но при его использовании есть определенные преимущества.

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

Работа со строгим режимом

Строгий режим — это инструмент, который требует от вас объявления переменных перед его использованием в сценарии PowerShell.

Обычно, если вы используете переменную без ее предварительного объявления, PowerShell будет рассматривать эту переменную как нулевую или имеющую значение 0, в зависимости от типа переменной. Когда вы включаете строгий режим, PowerShell не будет автоматически устанавливать переменные в null, и это вызовет ошибку, если вы попытаетесь использовать необъявленную переменную.

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

Необъявленные переменные могут запутать людей, работающих над сценарием. Они не разъясняют предполагаемое поведение. Вы также не можете знать, существуют ли эти переменные или нет. Строгий режим помогает устранить/уменьшить вероятность путаницы, если над вашим сценарием работает много людей.

Изображение 1412

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

Версия 1.0

Как вы, наверное, уже догадались, в версии 1.0 переменные должны быть объявлены до того, как вы сможете их использовать.

Глядя на следующий рисунок, вы можете видеть, что я включил строгий режим с помощью командлета Set-StrictMode и установил номер версии 1.0. Если я затем попытаюсь вывести содержимое необъявленной переменной $B, я получу ошибку.

Изображение 77

Версия 2.0

Строгий режим версии 2.0 также требует использования объявления переменных. Кроме того, PowerShell также устанавливает некоторые правила для вызовов функций.

Когда вы вызываете функцию, ожидающую несколько параметров, Microsoft ожидает, что вы предоставите имя функции и переменные, которые вы хотите передать в функцию. Если, например, я попытался передать переменные $A и $B в функцию с именем Run-MyFunction, то «правильным» способом сделать это было бы использование этой команды:

Run-MyFunction $A $B

Тем не менее, это не единственный формат, который принимает PowerShell. Если я отключу строгий режим, я могу сделать тот же вызов функции с помощью этой команды:

Run-MyFunction ($A, $B)

Тем не менее, версия 2.0 не позволяет использовать круглые скобки и запятые в вызовах функций.

Версия 3.0

Версия 3.0 добавляет дополнительные требования. А именно, вы не можете вызвать позицию массива за пределами границ. Возьмите эту команду, например:

[электронная почта защищена](1,2,3,4,5)

Эта команда создает массив из пяти позиций с именем $A. Один находится в нулевой позиции массива и так далее. Двое занимают одну позицию, трое занимают позицию двойки, четверо занимают позицию троек, а пятеро занимают позицию четверки.

Итак, теперь давайте представим, что я хочу проверить позицию массива, чтобы убедиться, что она равна содержимому $B. Для демонстрации я установлю $B=5.

Если бы я набрал $B -eq $A[1], PowerShell вычислил бы выражение обычным способом. Затем он вернет значение False, поскольку $B=5 и $A[1]=2.

Точно так же, если бы я набрал $B -eq $A[4], PowerShell вернул бы результат True, поскольку оба значения равны 5. Если бы я набрал $B -eq $A[5], PowerShell выдал бы мне сообщение об ошибке. Он скажет мне, что выражение выходит за пределы. Взгляните, например, на рисунок ниже.

Изображение 1426

Вы, наверное, задаетесь вопросом:

Вам действительно нужно использовать строгий режим?

Вам нужно использовать строгий режим в сценариях PowerShell? Это зависит от вашего ответа на эти два вопроса:

  1. Насколько вероятно, что вам потребуется изменить код в будущем?
  2. Каковы шансы, что кому-то другому придется изменить код ?

Если вы пытаетесь создать одноразовый скрипт, с которым больше никто не будет связываться, вы, вероятно, справитесь и без строгого режима. Если, с другой стороны, вы или кто-то еще будете вносить изменения в сценарий в будущем, то, вероятно, имеет смысл придерживаться хороших практик кодирования.

Советы профессионалов

  • Используйте командлет Set-StrictMode, чтобы включить этот режим в сеансе PowerShell.
  • Найдите параметр Версия, чтобы выбрать, какие правила применять.

Нижняя линия

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

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

Я показал вам, как на практике включение строгого режима вынуждает вас заранее объявлять свои переменные и как версии 2.0 и 3.0 также добавляют дополнительную функциональность. Хотя требование объявлять переменные перед использованием может показаться незначительным, оно может упростить отладку сценария.

Я склонен считать строгий режим отправной точкой, а не конечной точкой, потому что обычно это означает, что разработчики PowerShell применяют некоторые дополнительные методы кодирования.

У вас есть еще вопросы о строгом режиме? Прочтите FAQ и ресурсы ниже!

Часто задаваемые вопросы

Могу ли я отключить строгий режим после его включения?

При включении строгого режима необходимо использовать командлет Set-StrictMode с параметром -Version и желаемым номером версии. Если вы хотите отключить строгий режим, используйте командлет Set-StrictMode, но замените параметр -Version на -Off (номер версии не нужен).

На какие области влияет включение строгого режима?

Когда вы включаете строгий режим, он применяется только к текущей области и любым дочерним областям. Кроме того, строгий режим работает только во время текущих сеансов. Если вы откроете другое окно PowerShell, строгий режим не будет работать, пока вы его не включите.

Каковы некоторые рекомендации PowerShell?

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

Может ли строгий режим усложнить разработку сценариев PowerShell?

Новички в PowerShell могут обнаружить, что строгий режим требует больше усилий, особенно при устранении ошибок. Как только вы приобретете немного опыта, вам будет намного проще распознать ошибку, вызванную нарушением строгого режима.

Будет ли у Strict Mode версия 4.0?

Точно знает только Microsoft, но вполне вероятно, что Strict Mode будет расширяться в будущем. Microsoft регулярно создает новые версии PowerShell, поэтому Microsoft может обновлять строгий режим по мере развития PowerShell.