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à strict per l'ambito corrente e tutti gli ambiti figlio e lo attiva e disattiva. Quando la modalità strict è attivata, PowerShell genera un errore irreversibile 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 le regole di codifica da applicare.
Set-PSDebug -Strict
Il cmdlet attiva la modalità strict per l'ambito globale. Set-StrictMode
influisce solo sull'ambito corrente e sui relativi ambiti figlio. È quindi possibile usarlo in uno script o in una funzione per eseguire l'override dell'impostazione ereditata dall'ambito globale.
Quando Set-StrictMode
è disattivato, PowerShell presenta i comportamenti seguenti:
- Si presuppone che le variabili non inizializzate abbiano un valore
0
pari a (zero) o$Null
, a seconda del tipo - Riferimenti a proprietà inesistenti restituiscono
$Null
- I risultati della sintassi della funzione non corretta variano a seconda delle condizioni di errore
- Tentativo di recuperare un valore utilizzando un indice non valido in una matrice restituisce
$Null
Esempio
Esempio 1: Attivare la modalità strict 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à strict impostata sulla versione 1.0
, i tentativi di fare riferimento a variabili che non vengono inizializzate hanno esito negativo.
Esempio 2: Attivare la modalità strict 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."
$null -eq $string.Month
True
Set-StrictMode -Version 2.0
$string = "This is a string."
$null -eq $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
Questo comando attiva la modalità strict 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à inesistenti.
L'output di esempio mostra l'effetto della modalità strict della versione 2.0
.
Senza la modalità strict della versione 2.0
, il (3,4)
valore viene interpretato come un singolo oggetto matrice a cui non viene aggiunto alcun elemento. Con la modalità strict della versione 2.0
, viene interpretata correttamente come sintassi difettosa per l'invio di due valori.
Senza versione 2.0
, il riferimento alla proprietà Month inesistente di una stringa restituisce solo $Null
. Con la versione 2.0
, viene interpretato correttamente come errore di riferimento.
Esempio 3: Attivare la modalità strict come versione 3.0
Con la modalità strict impostata su Off, gli indici non validi o non validi restituiscono valori 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']
Index was outside the bounds of the array.
At line:1 char:1
+ $null -eq $a[2]
+ ~~~~~~~~~~~~~~~
+ 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
+ $null -eq $a['abc']
+ ~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvalidCastFromStringToInteger
Con la modalità strict impostata su versione 3
o successiva, gli indici non validi o non associati generano errori.
Parametri
-Off
Indica che questo cmdlet disattiva la modalità strict per l'ambito corrente e tutti gli ambiti figlio.
Tipo: | SwitchParameter |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Version
Specifica le condizioni che generano errori in modalità strict. Questo parametro accetta qualsiasi numero di versione di PowerShell valido. Qualsiasi numero maggiore di 3
viene considerato come Latest
. Il valore specificato deve essere la stringa o una stringa Latest
che può essere convertita in un tipo System.Version . La versione deve corrispondere a una versione di rilascio valida di PowerShell.
I valori effettivi per questo parametro sono:
1.0
- Impedisce i riferimenti a variabili non inizializzate, ad eccezione delle variabili non inizializzate nelle stringhe.
2.0
- Impedisce riferimenti a variabili non inizializzate. Sono incluse variabili non inizializzate nelle stringhe.
- Impedisce riferimenti a proprietà inesistenti di un oggetto .
- Impedisce le chiamate di funzione che usano la sintassi per chiamare i metodi.
3.0
- Impedisce riferimenti a variabili non inizializzate. Sono incluse variabili non inizializzate nelle stringhe.
- Impedisce riferimenti a proprietà inesistenti di un oggetto .
- Impedisce le chiamate di funzione che usano la sintassi per chiamare i metodi.
- Non consentire limiti o indici di matrice non risolvibili.
Latest
- 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.
Attenzione
L'uso di Latest
per Version negli script non è deterministico. Il significato di Latest
può cambiare nelle nuove versioni di PowerShell. Uno script scritto per una versione precedente di PowerShell che usa Set-StrictMode -Version Latest
è soggetto a regole più restrittive quando viene eseguito in una versione più recente di PowerShell.
Tipo: | Version |
Alias: | v |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
None
Non è possibile inviare tramite pipe oggetti a questo cmdlet.
Output
None
Questo cmdlet non restituisce output.
Note
Mentre il parametro Version accetta valori maggiori di 3.0
, non sono definite regole aggiuntive per qualsiasi valore superiore a 3.0
.
Set-StrictMode
è efficace solo nell'ambito in cui è impostato e nei relativi ambiti figlio. Per altre informazioni sugli ambiti in PowerShell, vedere about_Scopes.