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.