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.
Эта команда включает строгий режим и задает для нее версию 2.0
. В результате PowerShell возвращает ошибку, если используется синтаксис метода, использующий скобки и запятые, для вызова функции или ссылки на неинициализированные переменные или несуществующие свойства.
В примере выходных данных показан эффект строгого режима версии 2.0
.
Без строгого режима версии 2.0
значение интерпретируется как один объект массива, (3,4)
к которому ничего не добавляется. В строгом режиме версии 2.0
он правильно интерпретируется как неисправный синтаксис для отправки двух значений.
Без версии 2.0
ссылка только на несуществующее свойство Month строки возвращается только $Null
. С версией 2.0
она интерпретируется правильно как ошибка ссылки.
Пример 3. Включение строгого режима в версии 3.0
Если в строгом режиме задано значение Off, invalid or out of bounds indexes, возвращаются значения 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
Указывает, что этот командлет отключает строгий режим для текущей области и всех дочерних областей.
Тип: | SwitchParameter |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | 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.
Тип: | Version |
Aliases: | v |
Position: | Named |
Default value: | None |
Обязательно: | True |
Принять входные данные конвейера: | False |
Принять подстановочные знаки: | False |
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
Этот командлет не возвращает выходные данные.
Примечания
Хотя параметр Version принимает значения больше, чем3.0
, нет дополнительных правил, определенных для чего-либо выше3.0
.
Set-StrictMode
действует только в области, в которую она входит и в ее дочерних областях. Дополнительные сведения о областях в PowerShell см . в about_Scopes.
Связанные ссылки
PowerShell