PowerShell Logo Small

Set-StrictMode



This is the built-in help made by Microsoft for the command 'Set-StrictMode', in PowerShell version 2 - as retrieved from Windows version 'Microsoft® Windows Vista™ Ultimate ' PowerShell help files on 2016-06-23.

For PowerShell version 3 and up, where you have Update-Help, this command was run just before creating the web pages from the help files.

SYNOPSIS

Establishes and enforces coding rules in expressions, scripts, and script blocks.

SYNTAX


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



Search powershellhelp.space

DESCRIPTION


The Set-StrictMode cmdlet configures strict mode for the current scope (and all child scopes) and turns it on and off. When strict mode is on, Wi
ndows PowerShell generates a terminating error when the content of an expression, script, or script block violates basic best-practice coding rul
es.

Use the Version parameter to determine which coding rules are enforced.

Unlike the Set-PSDebug cmdlet, Set-StrictMode affects only the current scope and its child scopes, so you can use it in a script or function with
out affecting the global scope.

When Set-StrictMode is off, uninitialized variables (Version 1) are assumed to have a value of 0 (zero) or $null, depending on type. References t
o non-existent properties return $null, and the results of function syntax that is not valid vary with the error. Unnamed variables are not permi
tted.



<

RELATED LINKS

Online version: http://go.microsoft.com/fwlink/?LinkID=113450
about_Debuggers
about_Scopes
Set-PSDebug

REMARKS

<

Examples


-------------------------- EXAMPLE 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



Description
-----------
This command turns strict mode on and sets it to version 1.0. As a result, attempts to reference variables that are not initialized will fail.

The sample output shows the effect of version 1.0 strict mode.








-------------------------- EXAMPLE 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



Description
-----------
This command turns strict mode on and sets it to version 2.0. As a result, Windows PowerShell throws an error if you use method syntax (parenthes
es and commas) for a function call or reference uninitialized variables or non-existent properties.

The sample output shows the effect of version 2.0 strict mode.

Without version 2.0 strict mode, the "(3,4)" value is interpreted as a single array object to which nothing is added. With version 2.0 strict mod
e, it is correctly interpreted as faulty syntax for submitting two values.

Without version 2.0, the reference to the non-existent Month property of a string returns only null. With version 2.0, it is interpreted correctl
y as a reference error.