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

Синтаксис

Set-StrictMode -Off [<CommonParameters>]

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

Описание

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

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

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

Если команда Set-StrictMode отключена, то предполагается, что неинициализированные переменные (Version 1) имеют значение 0 (нуль) или $null в зависимости от типа. При обращении к несуществующим свойствам возвращается значение $null, а в случае неправильного синтаксиса функции результаты зависят от типа ошибки. Неименованные переменные не разрешены.

Параметры

-Off

Отключает строгий режим. Этот параметр также отключает команду "Set-PSDebug -Strict".

Обязательно?

true

Позиция?

named

Значение по умолчанию

нет

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Version <Version>

Определяет условия, которые приводят к ошибке в строгом режиме. Это обязательный параметр.

Допустимые значения: "1.0", "2.0" и "Latest". В следующем списке показаны результаты использования каждого значения.

1.0

-- Ссылки на неинициализированные переменные, исключая неинициализированные переменные в строках, не разрешены.

2.0

-- Ссылки на неинициализированные переменные (включая неинициализированные переменные в строках) не разрешены.

-- Ссылки на несуществующие свойства объекта не разрешены.

-- Вызовы функций с использованием синтаксиса вызова методов не разрешены.

-- Переменные без имени (${}) не разрешены.

Latest:

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

Обязательно?

true

Позиция?

named

Значение по умолчанию

нет

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

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

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

Нет

Передать входные данные этому командлету по конвейеру невозможно.

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

Нет

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

Примечания

Команда Set-StrictMode аналогична параметру команды Set-PSDebug. Команда "Set-Strictmode -version 1" эквивалентна команде "Set-PSDebug –strict" за исключением того, что команда Set-PSDebug действует во всех областях. Set-StrictMode оказывает влияние только на область, в которой она задана, и ее дочерние области. Дополнительные сведения об областях в Windows PowerShell см. в разделе about_Scopes.

Пример 1

C:\PS>set-strictmode -version 1.0

C:\PS> $a -gt 5
False
The variable $a cannot be retrieved because it has not been set yet.
At line:1 char:3
+ $a <<<<  -gt 5
	+ CategoryInfo		: InvalidOperation: (a:Token) [], RuntimeException
	+ FullyQualifiedErrorId : VariableIsUndefined

Описание
-----------
Эта команда включает строгий режим и задает версию режима 1.0. В результате при попытке обращения к неинициализированным переменным произойдет ошибка.

Пример выходных данных приведен для строгого режима версии 1.0.






Пример 2

C:\PS># set-strictmode -version 2.0

# Strict mode is off by default.

C:\PS> function add ($a, $b) {$a + $b}
C:\PS> add 3 4
7
C:\PS> add(3,4)
3
4

C:\PS> set-strictmode -version 2.0

C:\PS> add(3,4)

The function or command was called like a method. Parameters should be separated by spaces, as described in 'Get-Help about_Parameter.'
At line:1 char:4
+ add <<<< (3,4)
	+ CategoryInfo		: InvalidOperation: (:) [], RuntimeException
	+ FullyQualifiedErrorId : StrictModeFunctionCallWithParens


C:\PS> set-strictmode -off

C:\PS> $string = "This is a string".
C:\PS> $string.Month
C:\PS>

C:\PS> set-strictmode -version 2.0

C:\PS> $string = "This is a string".
C:\PS> $string.Month
Property 'month' cannot be found on this object; make sure it exists.
At line:1 char:9
+ $string. <<<< month
	+ CategoryInfo		: InvalidOperation: (.:OperatorToken) [], RuntimeException
	+ FullyQualifiedErrorId : PropertyNotFoundStrict

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

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

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

Без строгого режима версии 2.0 ссылка на несуществующее свойство Month строки просто возвращает значение null. В строгом режиме версии 2.0 она интерпретируется как ошибочная ссылка.






См. также