Condividi tramite


Set-StrictMode

Stabilisce e applica regole di codifica in espressioni, script e blocchi di script.

Sintassi

Version (Impostazione predefinita)

Set-StrictMode
    -Version <Version>
    [<CommonParameters>]

Off

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.

Utilizzare il parametro Version per determinare quali regole di codifica vengono applicate.

Set-PSDebug -Strict cmdlet attiva la modalità strict per l'ambito globale. Set-StrictMode influisce solo sull'ambito corrente e sui relativi ambiti figlio. Pertanto, è possibile utilizzarlo 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à rigorosa impostata su version 1.0, i tentativi di fare riferimento a variabili non 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. Utilizzando la modalità di restrizione della versione 2.0 , viene interpretata correttamente come sintassi errata per l'invio di due valori.

Senza la versione 2.0, il riferimento alla proprietà month inesistente di una stringa restituisce solo $Null. Utilizzando la versione 2.0, viene interpretato correttamente come un 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
$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.

Proprietà dei parametri

Tipo:SwitchParameter
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

Off
Posizione:Named
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti: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.

Attenzione

Utilizzo di una versione di Latest negli script. Il significato di Latest può cambiare nelle nuove versioni di PowerShell. Pertanto, uno script scritto per una versione precedente di PowerShell che utilizza Set-StrictMode -Version Latest è soggetto a regole più restrittive quando viene eseguito in una versione più recente di PowerShell.

Proprietà dei parametri

Tipo:Version
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False
Alias:v

Set di parametri

Version
Posizione:Named
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

CommonParameters

Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.

Input

None

Non è possibile inviare tramite pipe l'input a questo cmdlet.

Output

None

Questo cmdlet non restituisce alcun output.

Note

Mentre Set-StrictMode il parametro Version accetta valori maggiori di 3.0, attualmente 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.