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 cmdlet Set-StrictMode
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
Set-PSDebug -Strict
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
(zero) o$Null
, a seconda del tipo - I riferimenti alle proprietà inesistente restituiscono
$Null
- I risultati della sintassi della funzione non corretta variano a seconda delle condizioni di errore
- Il tentativo di recuperare un valore usando 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
InvalidOperation: The variable '$a' cannot be retrieved because it has not been set.
Con la modalità strict impostata sulla versione 1.0
, i tentativi di fare riferimento a variabili che non sono 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)
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.
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 versione 2.0
modalità strict.
Senza la versione 2.0
modalità strict, il valore (3,4)
viene interpretato come un singolo oggetto matrice a cui non viene aggiunto alcun elemento. Con la versione 2.0
modalità strict, viene interpretata correttamente come sintassi difettosa per l'invio di due valori.
Senza 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 associati 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']
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."
Con la modalità strict impostata sulla versione 3
o versione 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 causano un errore 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
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.
Cautela
L'uso di Latest
per versione 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 alcun output.
Note
Mentre il parametro version
Set-StrictMode
è efficace solo nell'ambito in cui è impostato e nei relativi ambiti figlio. Per altre informazioni sugli ambiti in PowerShell, vedere about_Scopes.