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