Condividi tramite


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 per determinare le regole di codifica da applicare.

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, 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 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 Latest o una stringa che può essere convertita in un tipo di 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.

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