Set-StrictMode
Stabilisce e applica regole di codifica in espressioni, script e blocchi di script.
Sintassi
Set-StrictMode
-Version <Version>
[<CommonParameters>]
Set-StrictMode
[-Off]
[<CommonParameters>]
Descrizione
Il Set-StrictMode
cmdlet configura la modalità rigorosa per l'ambito corrente e tutti gli ambiti figlio e lo attiva e disattiva. Quando la modalità rigorosa è attiva, PowerShell genera un errore di terminazione quando il contenuto di un'espressione, uno script o un blocco di script viola le regole di codifica consigliate di base.
Usare il parametro Version per determinare quali regole di codifica vengono applicate.
Set-PSDebug -Strict
il cmdlet attiva la modalità rigorosa per l'ambito globale. Set-StrictMode
influisce solo sull'ambito corrente e sui relativi ambiti figlio. È pertanto possibile usarlo in uno script o in una funzione per eseguire l'override dell'impostazione ereditata dall'ambito globale.
Quando Set-StrictMode
è disattivato, PowerShell ha i comportamenti seguenti:
- Si presuppone che le variabili non inizializzate abbiano un valore pari a 0 (zero) o
$Null
, a seconda del tipo - Riferimenti alle proprietà non esistenti restituiscono
$Null
- I risultati della sintassi della funzione non corretta variano con le condizioni di errore
- Tentativo di recuperare un valore usando un indice non valido in una matrice restituisce
$Null
Esempio
Esempio 1: Attivare la modalità rigorosa come versione 1.0
# Strict mode is off by default.
$a -gt 5
False
Set-StrictMode -Version 1.0
$a -gt 5
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
Con la modalità rigorosa impostata sulla versione 1.0, tenta di fare riferimento alle variabili che non sono inizializzate.
Esempio 2: Attivare la modalità rigorosa come versione 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)
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
Set-StrictMode -Off
$string = "This is a string."
$string.Month -eq $null
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$string.Month -eq $null
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
Questo comando attiva la modalità rigorosa e lo imposta sulla versione 2.0. Di conseguenza, PowerShell restituisce un errore se si usa la sintassi del metodo, che usa parentesi e virgole, per una chiamata di funzione o fare riferimento a variabili non inizializzate o proprietà non esistenti.
L'output di esempio mostra l'effetto della modalità rigorosa versione 2.0.
Senza la modalità strict versione 2.0, il valore "(3,4)" viene interpretato come singolo oggetto di matrice a cui non viene aggiunto niente. Usando la modalità rigorosa versione 2.0, viene interpretata correttamente come sintassi difettosa per l'invio di due valori.
Senza la versione 2.0, il riferimento alla proprietà Month non esistente di una stringa restituisce solo $Null
. Usando la versione 2.0, viene interpretato correttamente come errore di riferimento.
Esempio 3: Attivare la modalità rigorosa come versione 3.0
Con la modalità rigorosa impostata su Disattivato, non valido o fuori dai limiti gli indici restituiscono valori Null.
# Strict mode is off by default.
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
True
True
Set-StrictMode -Version 3
$a = @(1)
$a[2] -eq $null
$a['abc'] -eq $null
Index was outside the bounds of the array.
At line:1 char:1
+ $a[2] -eq $null
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:) [], IndexOutOfRangeException
+ FullyQualifiedErrorId : System.IndexOutOfRangeException
Cannot convert value "abc" to type "System.Int32". Error: "Input string was not in a correct format."
At line:1 char:1
+ $a['abc'] -eq $null
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Con la modalità rigorosa impostata sulla versione 3 o successiva, gli indici non validi o non associati comportano errori.
Parametri
-Off
Indica che questo cmdlet disattiva la modalità rigorosa per l'ambito corrente e tutti gli ambiti figlio.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Version
Specifica le condizioni che generano errori in modalità strict. Questo parametro accetta qualsiasi numero di versione di PowerShell valido. Qualsiasi numero superiore a 3 viene considerato più recente.
I valori effettivi per questo parametro sono:
- 1.0
- Impedisce i riferimenti alle variabili non inizializzate, ad eccezione delle variabili non inizializzate nelle stringhe.
- 2,0
- Impedisce riferimenti a variabili non inizializzate. Ciò include variabili non inizializzate in stringhe.
- Impedisce riferimenti alle proprietà non esistenti di un oggetto.
- Impedisce le chiamate di funzione che usano la sintassi per chiamare i metodi.
- 3,0
- Impedisce riferimenti a variabili non inizializzate. Ciò include variabili non inizializzate in stringhe.
- Impedisce riferimenti alle proprietà non esistenti di un oggetto.
- Impedisce le chiamate di funzione che usano la sintassi per chiamare i metodi.
- Non consentire limiti o indici di matrice non risolti.
- Più recente
- Seleziona la versione più recente disponibile. La versione più recente è la più rigorosa. Usare questo valore per assicurarsi che gli script usino la versione più rigorosa disponibile, anche quando vengono aggiunte nuove versioni a PowerShell.
Type: | Version |
Aliases: | v |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Input
None
Non è possibile inviare input tramite pipe a questo cmdlet.
Output
None
Questo cmdlet non restituisce alcun output.
Note
Set-StrictMode
è efficace solo nell'ambito in cui è impostato e negli ambiti figlio. Per altre informazioni sugli ambiti in PowerShell, vedere about_Scopes.