Поделиться через


Set-StrictMode

Устанавливает и применяет правила кодирования в выражениях, сценариях и блоках сценариев.

Синтаксис

Set-StrictMode
   -Version <Version>
   [<CommonParameters>]
Set-StrictMode
   [-Off]
   [<CommonParameters>]

Описание

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

Используйте параметр Version , чтобы определить правила кодирования, которые необходимо применить.

Set-PSDebug -StrictКомандлет включает строгий режим для глобального область. Set-StrictModeвлияет только на текущую область и ее дочерние области. Затем его можно использовать в скрипте или функции для переопределения параметра, унаследованного от глобального область.

Если Set-StrictMode параметр отключен, PowerShell имеет следующие варианты поведения:

  • Предполагается, что неинициализированные 0 переменные имеют значение (ноль) или $Null, в зависимости от типа.
  • Ссылки на несуществующие свойства возвращаются $Null
  • Результаты неправильного синтаксиса функции зависят от условий ошибки
  • Попытка получить значение с использованием недопустимого индекса в массиве возвращает $Null

Примеры

Пример 1. Включение строгого режима в версии 1.0

# Strict mode is off by default.
$a -gt 5

False

Set-StrictMode -Version 1.0
$a -gt 5

InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.

Если для строгого режима задана версия 1.0, попытки ссылаться на переменные, которые не инициализированы, завершаются сбоем.

Пример 2. Включение строгого режима в версии 2.0

# Strict mode is off by default.
function add ($a, $b) {
    '$a = ' + $a
    '$b = ' + $b
    '$a+$b = ' + ($a + $b)
}
add 3 4

$a = 3
$b = 4
$a+$b = 7

add(3,4)

$a = 3 4
$b =
$a+$b = 3 4

Set-StrictMode -Version 2.0
add(3,4)

InvalidOperation: The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.

Set-StrictMode -Off
$string = "This is a string."
$null -eq $string.Month

True

Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $string.Month

PropertyNotFoundException: The property 'Month' cannot be found on this object. Verify that the property exists.

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

В примере выходных данных показано влияние режима строгости версии 2.0 .

Без строгого (3,4) режима версии 2.0 значение интерпретируется как единый объект массива, к которому ничего не добавляется. В режиме строгости версии 2.0 он правильно интерпретируется как неправильный синтаксис для отправки двух значений.

Без версии 2.0ссылка на несуществующее свойство Month строки возвращает только $Null. При использовании версии 2.0она правильно интерпретируется как ошибка ссылки.

Пример 3. Включение строгого режима в версии 3.0

Если для строгого режима задано значение Выкл., недопустимые или неограничимые индексы возвращают значения NULL.

# Strict mode is off by default.
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']

True
True

Set-StrictMode -Version 3.0
$a = @(1)
$null -eq $a[2]
$null -eq $a['abc']

OperationStopped: Index was outside the bounds of the array.

InvalidArgument: Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."

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

Параметры

-Off

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

Type:SwitchParameter
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Version

Определяет условия, которые приводят к ошибке в строгом режиме. Этот параметр принимает любой допустимый номер версии PowerShell. Любое число, превышающее значение , 3 обрабатывается как Latest. Предоставленное значение должно быть строкой Latest или строкой, которую можно преобразовать в тип System.Version . Версия должна соответствовать допустимой версии выпуска PowerShell.

Действующие значения для этого параметра:

  • 1.0
    • Запрещает ссылки на неинициализированные переменные, за исключением неинициализированных переменных в строках.
  • 2.0
    • Запрещает ссылки на неинициализированные переменные. Сюда входят неинициализированные переменные в строках.
    • Запрещает ссылки на несуществующие свойства объекта.
    • Запрещает вызовы функций, которые используют синтаксис для вызова методов.
  • 3.0
    • Запрещает ссылки на неинициализированные переменные. Сюда входят неинициализированные переменные в строках.
    • Запрещает ссылки на несуществующие свойства объекта.
    • Запрещает вызовы функций, которые используют синтаксис для вызова методов.
    • Запретить выход за пределы границ или неразрешимые индексы массива.
  • Latest
    • Выбирает последнюю доступную версию. Последняя версия является самой строгой. Используйте это значение, чтобы убедиться, что скрипты используют самую строгую доступную версию даже при добавлении новых версий в PowerShell.

Внимание!

Использование Latest для версии в скриптах не является детерминированным. Значение Latest может измениться в новых выпусках PowerShell. Скрипт, написанный для более старой версии PowerShell, в котором используется Set-StrictMode -Version Latest , регулируется более строгими правилами при выполнении в более новой версии PowerShell.

Type:Version
Aliases:v
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

Входные данные

None

Вы не можете передать объекты в этот командлет.

Выходные данные

None

Этот командлет не возвращает выходные данные.

Примечания

Хотя параметр Version принимает значения, превышающие 3.0, для чего-либо выше 3.0не определены дополнительные правила.

Set-StrictModeдействует только в область он задан в и в дочерних областях. Дополнительные сведения об областях в PowerShell см. в разделе about_Scopes.