Condividi tramite


12. Attributi

Nota editoriale

Importante

La specifica del linguaggio di Windows PowerShell 3.0 è stata pubblicata nel dicembre 2012 ed è basata su Windows PowerShell 3.0. Questa specifica non riflette lo stato corrente di PowerShell. Non è previsto l'aggiornamento di questa documentazione per riflettere lo stato corrente. Questa documentazione è presentata qui per riferimento cronologico.

Il documento delle specifiche è disponibile come documento di Microsoft Word dall'area download di Microsoft al seguente indirizzo: https://www.microsoft.com/download/details.aspx?id=36389 Questo documento Word è stato convertito per la presentazione qui su Microsoft Learn. Durante la conversione sono state apportate alcune modifiche editoriali per supportare la formattazione per la piattaforma Docs. Sono stati corretti alcuni errori di digitazioni e errori secondari.

Un attributo oggetto associa informazioni di sistema predefinite a un elemento di destinazione , che può essere un blocco param o un parametro (§8.10). Ogni oggetto di attributo ha un attributo di tipo .

Le informazioni fornite da un attributo sono note anche come metadati . I metadati possono essere esaminati dal comando o dall'ambiente di esecuzione per controllare il modo in cui il comando elabora i dati o prima della fase di esecuzione da strumenti esterni per controllare il modo in cui il comando stesso viene elaborato o gestito.

È possibile applicare più attributi allo stesso elemento di destinazione.

12.1 Specifica dell'attributo

Suggerimento

La notazione ~opt~ nelle definizioni della sintassi indica che l'entità lessicale è facoltativa nella sintassi.

attribute-list:
    attribute
    attribute-list new-lines~opt~ attribute

attribute:
    [ new-lines~opt~ attribute-name ( attribute-arguments new-lines~opt~ ) new-lines~opt~ ]
    type-literal

attribute-name:
    type-spec

attribute-arguments:
    attribute-argument
    attribute-argument new-lines~opt~ ,
    attribute-arguments

attribute-argument:
    new-lines~opt~ expression
    new-lines~opt~ simple-name
    new-lines~opt~ simple-name = new-lines~opt~ expression

Un attributo è costituito da un nome dell'attributo e da un elenco facoltativo di argomenti posizionali e denominati. Gli argomenti posizionali (se presenti) precedono gli argomenti denominati. Un argomento denominato è costituito da un nome semplice, seguito facoltativamente da un segno di uguale e seguito da un'espressione . Se l'espressione viene omessa, viene utilizzato il valore $true.

Il nome attributo è un tipo di attributo riservato (§12.3) o un tipo di attributo definito dall'implementazione.

12.2 Istanze degli attributi

Un'istanza dell'attributo è un oggetto di un tipo di attributo. L'istanza rappresenta un attributo in fase di esecuzione.

Per creare un oggetto di un tipo di attributo A, usare la notazione A(). Un attributo viene dichiarato racchiudendo l'istanza all'interno di [], come in [A()]. Alcuni tipi di attributo hanno parametri posizionali e denominati (§8.14), proprio come funzioni e cmdlet. Ad esempio:

[A(10,IgnoreCase=$true)]

mostra un'istanza di tipo e creata usando un parametro posizionale il cui valore dell'argomento è 10 e un parametro chiamato IgnoreCase, il cui valore dell'argomento è $true.

12.3 Attributi riservati

Gli attributi descritti nelle sezioni seguenti possono essere usati per aumentare o modificare il comportamento delle funzioni di PowerShell, filtri, script e cmdlet.

12.3.1 Attributo Alias

Questo attributo viene utilizzato in un parametro script per specificare un nome alternativo per un parametro. Un parametro può avere più alias e ogni nome alias deve essere univoco all'interno di un elenco di parametri . Un possibile uso consiste nell'avere nomi diversi per un parametro in set di parametri diversi (vedere ParameterSetName).

L'argomento attributo ha il tipo string[].

Si consideri una chiamata di funzione Test1 con il blocco param seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true)]
    [Alias("CN")]
    [Alias("Name", "System")]
    [string[]] $ComputerName
)

Test1 "Mars", "Saturn"                # pass argument by position
Test1 -ComputerName "Mars", "Saturn"  # pass argument by name
Test1 -CN "Mars", "Saturn"            # pass argument using first alias
Test1 -Name "Mars", "Saturn"          # pass argument using second alias
Test1 -Sys "Mars", "Saturn"           # pass argument using third alias

Si consideri una chiamata di funzione Test2 con il blocco param seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
    [Alias('PSPath')]
    [string] $LiteralPath
)

Get-ChildItem "E:\*.txt" | Test2 -LiteralPath { $_ ; "`n`t";
    $_.FullName + ".bak" }
Get-ChildItem "E:\*.txt" | Test2

Il cmdlet Get-ChildItem (alias dir) aggiunge all'oggetto che restituisce un nuovo NoteProperty di tipo string, denominato PSPath.

12.3.2 Attributo AllowEmptyCollection

Questo attributo viene utilizzato in un script-parameter per consentire una raccolta vuota come argomento di un parametro obbligatorio.

Si consideri una chiamata di funzione Test con il blocco param seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true)]
    [AllowEmptyCollection()]
    [string[]] $ComputerName
)

Test "Red", "Green" # $ComputerName has Length 2
Test "Red" # $ComputerName has Length 1
Test -Comp @() # $ComputerName has Length 0

12.3.3 L'attributo AllowEmptyString

Questo attributo viene usato in una script-parameter per consentire una stringa vuota come argomento in un parametro obbligatorio.

Si consideri una chiamata di funzione Test con il blocco param seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true)]
    [AllowEmptyString()]
    [string] $ComputerName
)

Test "Red" # $ComputerName is "Red"
Test "" # empty string is permitted
Test -Comp "" # empty string is permitted

12.3.4 Attributo AllowNull

Questo attributo viene usato in un parametro dello script per consentire "$null" come argomento di un parametro obbligatorio per cui non è disponibile alcuna conversione implicita.

Si consideri una chiamata di funzione Test con il blocco di parametri seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true)]
    [AllowNull()]
    [int[]] $Values
)

Test 10, 20, 30     # $values has Length 3, values 10, 20, 30
Test 10, $null, 30  # $values has Length 3, values 10, 0, 30
Test -Val $null     # $values has value $null

Si noti che il secondo caso precedente non richiede questo attributo; esiste già una conversione implicita da $null a int.

12.3.5 Attributo CmdletBinding

Questo attributo viene utilizzato nell'attribute-list del param-block di una funzione per indicare che la funzione agisce in modo simile a un cmdlet. In particolare, consente alle funzioni di accedere a diversi metodi e proprietà tramite la variabile $PSCmdlet usando blocchi denominati begin, process e end (§8.10.7).

Quando questo attributo è presente, gli argomenti posizionali che non dispongono di parametri posizionali corrispondenti causano l'esito negativo dell'associazione di parametri e $args non è definito. Senza questo attributo $args assumerà valori di argomento posizionali non corrispondenti.

Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
SupportsShouldProcess (denominato)

Tipo: bool; Valore predefinito: $false

Specifica se la funzione supporta le chiamate al metodo ShouldProcess, che viene usato per richiedere commenti e suggerimenti all'utente prima che la funzione effettui una modifica al sistema. Un valore di $true indica che lo fa. Un valore di $false indica che non lo fa.

ConfirmImpact (denominato)

Tipo: string; Valore predefinito: "Medio"

Specifica il livello di impatto dell'azione eseguita. La chiamata al metodo ShouldProcess visualizza una richiesta di conferma solo quando l'argomento ConfirmImpact è maggiore o uguale al valore della variabile di preferenza $ConfirmPreference.

I valori possibili di questo argomento sono:

Nessuno: elimina tutte le richieste di conferma.

Basso: l'azione eseguita ha un basso rischio di perdita dei dati.

Medio: l'azione eseguita ha un rischio medio di perdita dei dati.

Alto: l'azione eseguita ha un rischio elevato di perdita dei dati.

Il valore di $ConfirmPreference può essere impostato in modo che solo i cmdlet con un livello di impatto uguale o superiore possano richiedere conferma prima di eseguire l'operazione. Ad esempio, se $ConfirmPreference è impostato su Medio, i cmdlet con un livello di impatto medio o elevato possono richiedere la conferma. Le richieste dai cmdlet con un livello di impatto basso vengono eliminate.

DefaultParameterSetName (denominato)

Tipo: string; Valore predefinito: "__AllParameterSets"

Specifica il set di parametri da utilizzare se non può essere determinato dagli argomenti. Consultare l'argomento denominato ParameterSetName nell'attributo Parameter ([§12.3.7][§12.3.7]).

PositionalBinding (denominato)

Tipo: bool; Valore predefinito: $true

Specifica se l'associazione posizionale è supportata o meno. Il valore di questo argomento viene ignorato se i parametri specificano valori non predefiniti per l'argomento denominato Position o l'argomento denominato ParameterSetName nell'attributo Parameter ([§12.3.7][§12.3.7]). In caso contrario, se l'argomento è $false non sono presenti parametri posizionali, in caso contrario ai parametri viene assegnata una posizione in base all'ordine in cui vengono specificati i parametri.

Di seguito è riportato un esempio del framework per l'uso di questo attributo:

[CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")]
param ( ... )

begin { ... }
Get-process { ... }
end { ... }

12.3.6 Attributo OutputType

Questo attributo viene utilizzato nell'elenco-attributi del blocco-parametri per specificare i tipi restituiti. Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
Tipo (posizione 0)

Tipo: string[] o matrice di valori letterali di tipo

Elenco dei tipi dei valori restituiti.

ParameterSetName (denominato)

Tipo: string[]

Specifica i set di parametri che restituiscono i tipi indicati dagli elementi corrispondenti del parametro Type.

Ecco alcuni esempi dell'uso di questo attributo:

[OutputType([int])] param ( ... )
[OutputType("double")] param ( ... )
[OutputType("string","string")] param ( ... )

12.3.7 Attributo Parametro

Questo attributo viene usato in un parametro script. Gli argomenti denominati seguenti vengono usati per definire le caratteristiche del parametro :

Parametro Scopo
HelpMessage (denominato)

Tipo: string

Questo argomento specifica un messaggio destinato a contenere una breve descrizione del parametro. Questo messaggio viene usato in modo definito dall'implementazione quando la funzione o il cmdlet viene eseguito ma un parametro obbligatorio con helpMessage non ha un argomento corrispondente.

Nell'esempio seguente viene illustrata una dichiarazione di parametro che fornisce una descrizione del parametro .

param ( [Parameter(Mandatory = $true,
HelpMessage = "Una matrice di nomi dei computer.")]
[string[]] $ComputerName )

Windows PowerShell: se non viene specificato un parametro obbligatorio, il runtime richiede all'utente un valore di parametro. La finestra di dialogo del prompt include il testo HelpMessage.

Obbligatorio (denominato)

Tipo: bool; Valore predefinito: $false

Questo argomento specifica se il parametro è obbligatorio all'interno del set di parametri specificato (vedere l'argomento ParameterSetName riportato di seguito). Un valore di $true indica che lo è. Un valore di $false indica che non lo è.

param ( [Parameter(Mandatory = $true)]
[string[]] $ComputerName )

Windows PowerShell: se non viene specificato un parametro obbligatorio, il runtime richiede all'utente un valore di parametro. La finestra di dialogo del prompt include il testo HelpMessage, se presente.

ParameterSetName (denominato)

Tipo: string; Valore predefinito: "__AllParameterSets"

È possibile scrivere una singola funzione o un singolo cmdlet in grado di eseguire azioni diverse per diversi scenari. Questa operazione viene eseguita esponendo diversi gruppi di parametri a seconda dell'azione che si vuole eseguire. Tali raggruppamenti di parametri vengono chiamati set di parametri .

L'argomento ParameterSetName specifica il set di parametri a cui appartiene un parametro. Questo comportamento significa che ogni set di parametri deve avere un parametro univoco che non è membro di un altro set di parametri.

Per i parametri che appartengono a più set di parametri, aggiungere un attributo Parameter per ogni set di parametri. In questo modo il parametro può essere definito in modo diverso per ogni set di parametri.

Un set di parametri che contiene più parametri posizionali deve definire posizioni univoche per ogni parametro. Nessun parametro posizionale può specificare la stessa posizione.

Se non viene specificato alcun set di parametri per un parametro, il parametro appartiene a tutti i set di parametri.

Quando vengono definiti più set di parametri, l'argomento denominato DefaultParameterSetName dell'attributo CmdletBinding ([§12.3.5][§12.3.5]) viene usato per specificare il set di parametri predefinito. Il runtime usa il set di parametri predefinito se non è in grado di determinare il set di parametri da usare in base alle informazioni fornite dal comando oppure genera un'eccezione se non è stato specificato alcun set di parametri predefinito.

Nell'esempio seguente viene illustrata una funzione Test con una dichiarazione di parametro di due parametri che appartengono a due set di parametri diversi e un terzo parametro appartenente a entrambi i set:

param ( [Parameter(Mandatory = $true,
ParameterSetName = "Computer")]
[string[]] $ComputerName,

[Parametro(Obbligatorio = $true,
ParameterSetName = "User")]
[string[]] $UserName,

[Parametro(Obbligatorio = $true,
ParameterSetName = "Computer")]
[Parameter(ParameterSetName = "User")]
[int] $SharedParam = 5 )

if ($PSCmdlet.ParameterSetName -eq "Computer")
{
# gestire il set di parametri "Computer"
}

elseif ($PSCmdlet.ParameterSetName -eq "User")
{
# gestire il set di parametri 'User'
}

}

Test -ComputerName "Marte","Venere" -SharedParam 10
Test -UserName "Mary","Jack"
Test -UserName "Mary","Jack" -SharedParam 20

Posizione (denominata)

Tipo: int

Questo argomento specifica la posizione del parametro nell'elenco di argomenti. Se questo argomento non viene specificato, il nome del parametro o il relativo alias deve essere specificato in modo esplicito quando viene impostato il parametro. Se nessuno dei parametri di una funzione ha posizioni, le posizioni vengono assegnate a ogni parametro in base all'ordine in cui vengono ricevute.

Nell'esempio seguente viene illustrata la dichiarazione di un parametro il cui valore deve essere specificato come primo argomento quando viene chiamata la funzione.

param ( [Parameter(Position = 0)]
[string[]] $ComputerName )

ValueFromPipeline (denominato)

Tipo: bool; Valore predefinito: $false

Questo argomento specifica se il parametro accetta l'input da un oggetto pipeline. Un valore di $true indica che lo fa. Un valore di $false indica che non lo è.

Specificare $true se la funzione o il cmdlet accede all'oggetto completo, non solo a una proprietà dell'oggetto .

Un solo parametro in un set di parametri può dichiarare ValueFromPipeline come $true.

Nell'esempio seguente viene illustrata la dichiarazione di parametro di un parametro obbligatorio, $ComputerName, che accetta l'oggetto di input passato alla funzione dalla pipeline.

param ( [Parameter(Mandatory = $true,
ValueFromPipeline=$true)]
[string[]] $ComputerName )

Per un esempio di utilizzo di questo parametro insieme all'attributo Alias, vedere [§12.3.1][§12.3.1].

ValueFromPipelineByPropertyName (denominato)

Tipo: bool; Valore predefinito: $false

Questo argomento specifica se il parametro accetta il relativo valore da una proprietà di un oggetto pipeline con lo stesso nome o lo stesso alias di questo parametro. Un valore di $true indica che lo fa. Un valore di $false indica che non lo è.

Specificare $true se le condizioni seguenti sono vere: il parametro accede a una proprietà dell'oggetto pipe e la proprietà ha lo stesso nome del parametro oppure la proprietà ha lo stesso alias del parametro.

Un parametro con ValueFromPipelineByPropertyName impostato su $true non deve avere un parametro nello stesso set con ValueFromPipeline impostato su $true.

Se una funzione ha un parametro $ComputerName e l'oggetto piped ha una proprietà ComputerName, il valore della proprietà ComputerName viene assegnato al parametro $ComputerName della funzione:

param ( [Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[string[]] $ComputerName )

Più parametri in un set di parametri possono definire ValueFromPipelineByPropertyName come $true. Anche se un singolo oggetto di input non può essere associato a più parametri, è possibile associare proprietà diverse in tale oggetto di input a parametri diversi.

Quando si associa un parametro con una proprietà di un oggetto di input, l'ambiente di runtime cerca innanzitutto una proprietà con lo stesso nome del parametro.  Se tale proprietà non esiste, l'ambiente di runtime cerca gli alias per tale parametro, nell'ordine di dichiarazione, selezionando il primo alias per cui esiste una proprietà.

funzione Process-Date
{
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Year,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Month,

[Parameter(ValueFromPipelineByPropertyName=$true)]
[int]$Day
)

process { ... }
}

Get-Date | Process-Date

ValueFromRemainingArguments (denominato)

Tipo: bool; Valore predefinito: $false

Questo argomento specifica se il parametro accetta tutti gli argomenti rimanenti che non sono associati ai parametri della funzione. Un valore di $true indica che lo fa. Un valore di $false indica che non lo è.

Nell'esempio seguente viene illustrato un parametro $Others che accetta tutti gli argomenti rimanenti dell'oggetto di input passato alla funzione Test:

param ( [Parameter(Mandatory = $true)][int] $p 1,
[Parameter(Obbligatorio = $true)][int] $p 2,
[Parametro(ValoreDaArgomentiRimanenti = $true)]
[string[]] $Others )

Test 10 20 # $Others ha una lunghezza di 0
Test 10 20 30 40 # $Others ha lunghezza 2, valore 30,40

Un'implementazione può anche definire altri attributi.

Vengono forniti anche gli attributi seguenti:

  • HelpMessageBaseName: specifica la posizione in cui si trovano gli identificatori di risorsa. Ad esempio, questo parametro può specificare un assembly di risorse che contiene messaggi di aiuto da localizzare.
  • HelpMessageResourceId: specifica l'identificatore della risorsa per un messaggio di aiuto.

12.3.8 Attributo PSDefaultValue

Questo attributo viene utilizzato in un script-parameter per fornire informazioni aggiuntive sul parametro. L'attributo viene usato in modo definito dall'implementazione. Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
Guida (denominata)

Tipo: string

Questo argomento specifica un messaggio destinato a contenere una breve descrizione del valore predefinito di un parametro. Questo messaggio viene usato in modo definito dall'implementazione.

Windows PowerShell: il messaggio viene usato come parte della descrizione del parametro per l'argomento della Guida visualizzato dal cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help).

Valore (denominato)

Tipo: oggetto

Questo argomento specifica un valore che deve essere il valore predefinito di un parametro. Il valore viene usato in modo definito dall'implementazione.

Windows PowerShell: il valore viene usato come parte della descrizione del parametro per l'argomento della Guida visualizzato da [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help)cmdlet quando la proprietà Della Guida non è specificata.

12.3.9 Attributo SupportsWildcards

Questo attributo viene utilizzato in un script-parameter per fornire informazioni aggiuntive sul parametro. L'attributo viene usato in modo definito dall'implementazione.

Questo attributo viene utilizzato come parte della descrizione del parametro per l'argomento di aiuto che viene visualizzato dal cmdlet Get-Help.

12.3.10 Attributo ValidateCount

Questo attributo viene usato in un script-parameter per specificare un numero di valori di argomento che il parametro può accettare, da un minimo a un massimo. Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
MinLength (posizione 0)

Tipo: int

Questo argomento specifica il numero minimo di valori di argomento consentiti.

Lunghezza massima (posizione 1)

Tipo: int

Questo argomento specifica il numero massimo di valori di argomento consentiti.

In assenza di questo attributo, l'elenco di valori dell'argomento corrispondente del parametro può essere di qualsiasi lunghezza.

Si consideri una chiamata di funzione Test con il blocco di parametri seguente e che viene chiamato come illustrato:

param (
    [ValidateCount(2, 5)]
    [int[]] $Values
)

Temp 10, 20, 30
Temp 10                         # too few argument values
Temp 10, 20, 30, 40, 50, 60     # too many argument values

[ValidateCount(3, 4)]$Array = 1..3
$Array = 10                     # too few argument values
$Array = 1..100                 # too many argument values

12.3.11 Attributo ValidateLength

Questo attributo viene utilizzato in un parametro di script o in una variabile per specificare la lunghezza minima e massima dell'argomento del parametro, che deve essere di tipo stringa. Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
MinLength (posizione 0)

Tipo: int

Questo argomento specifica il numero minimo di caratteri consentiti.

Lunghezza massima (posizione 1)

Tipo: int

Questo argomento specifica il numero massimo di caratteri consentiti.

In assenza di questo attributo, l'argomento corrispondente del parametro può essere di qualsiasi lunghezza.

Si consideri una chiamata di funzione Test con il blocco di parametri seguente e che viene chiamato come illustrato:

param ( [Parameter(Mandatory = $true)]
[ValidateLength(3,6)]
[string[]] $ComputerName )

Test "Thor","Mars"     # length is ok
Test "Io","Mars"       # "Io" is too short
Test "Thor","Jupiter"  # "Jupiter" is too long

12.3.12 Attributo ValidateNotNull

Questo attributo viene usato in un script-parametro o variabile per specificare che l'argomento del parametro non può essere $null o una raccolta contenente un elemento con valore nullo.

Si consideri una chiamata di funzione Test con il blocco di parametri seguente e che viene chiamato come di seguito:

param (
    [ValidateNotNull()]
    [string[]] $Names
)

Test "Jack", "Jill"     # ok
Test "Jane", $null      # $null array element value not allowed
Test $null              # null array not allowed

[ValidateNotNull()]$Name = "Jack" # ok
$Name = $null           # null value not allowed

12.3.13 Attributo ValidateNotNullOrEmpty

Questo attributo viene usato in un parametro script o variabile per specificare che l'argomento se il parametro non può essere $null, una stringa vuota o una matrice vuota oppure essere una raccolta contenente un elemento stringa $null o vuoto.

Si consideri una chiamata di funzione Test con il blocco param seguente e che viene chiamato come illustrato:

param (
    [ValidateNotNullOrEmpty()]
    [string[]] $Names
)

Test "Jack", "Jill"    # ok
Test "Mary", ""        # empty string not allowed
Test "Jane", $null     # $null array element value not allowed
Test $null             # null array not allowed
Test @()               # empty array not allowed

[ValidateNotNullOrEmpty()]$Name = "Jack" # ok
$Name = ""             # empty string not allowed
$Name = $null          # null value not allowed

12.3.14 Attributo ValidatePattern

Questo attributo viene usato in un di parametri script o variabile per specificare un'espressione regolare per corrispondere al modello dell'argomento del parametro. Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
RegexString (posizione 0)

Tipo: Stringa

Espressione regolare utilizzata per convalidare l'argomento del parametro

Opzioni (denominate)

Tipo: Regolare -Expression-Option

Per i valori consentiti, vedere [§4.2.6.4][§4.2.6.4].

Se l'argomento è una raccolta, ogni elemento della raccolta deve corrispondere al modello.

Si consideri una chiamata di funzione Test con il blocco param seguente e che viene chiamato come illustrato:

param (
    [ValidatePattern('\^[A-Z][1-5][0-9]$')]
    [string] $Code,

    [ValidatePattern('\^(0x|0X)([A-F]|[a-f]|[0-9])([A-F]|[a-f]|[0-9])$')]
    [string] $HexNum,

    [ValidatePattern('\^[+|-]?[1-9]$')]
    [int] $Minimum
)

Test -C A12 # matches pattern
Test -C A63 # does not match pattern

Test -H 0x4f # matches pattern
Test -H "0XB2" # matches pattern
Test -H 0xK3 # does not match pattern

Test -M -4 # matches pattern
Test -M "+7" # matches pattern
Test -M -12 # matches pattern, but is too long

[ValidatePattern('\^[a-z][a-z0-9]\*$')]$ident = "abc"
$ident = "123" # does not match pattern

12.3.15 Attributo ValidateRange

Questo attributo viene usato in un script del parametro o in una variabile per specificare il valore minimo e il massimo dell'argomento del parametro. Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
MinRange (posizione 0)

Tipo: oggetto

Questo argomento specifica il valore minimo consentito.

MaxRange (posizione 1)

Tipo: oggetto

Questo argomento specifica il valore massimo consentito.

In assenza di questo attributo, non esiste alcuna restrizione di intervallo.

Si consideri una chiamata di funzione Test1 con il blocco param seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange(1, 10)]
    [int] $StartValue
)

Test1 2
Test1 -St 7
Test1 -3 # value is too small
Test1 12 # value is too large

Si consideri una chiamata di funzione Test2 con il blocco di parametri e le chiamate seguenti:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange("b", "f")]
    [string] $Name
)

Test2 "Bravo" # ok
Test2 "Alpha" # value compares less than the minimum
Test2 "Hotel" # value compares greater than the maximum

Si consideri una chiamata di funzione Test3 con il blocco param seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true)]
    [ValidateRange(0.002, 0.003)]
    [double] $Distance
)

Test3 0.002
Test3 0.0019    # value is too small
Test3 "0.005"   # value is too large

[ValidateRange(13, 19)]$teenager = 15
$teenager = 20  # value is too large

12.3.16 Attributo ValidateScript

Questo attributo viene utilizzato in un parametro script o in una variabile per specificare uno script da usare per convalidare l'argomento del parametro.

L'argomento nella posizione 1 è un'espressione script-block-expression.

Si consideri una chiamata di funzione Test con il blocco param seguente e che viene chiamato come illustrato:

param (
    [Parameter(Mandatory = $true)]
    [ValidateScript( { ($_ -ge 1 -and $_ -le 3) -or ($_ -ge 20) })]
    [int] $Count
)

Test 2 # ok, valid value
Test 25 # ok, valid value
Test 5 # invalid value
Test 0 # invalid value

[ValidateScript({$_.Length --gt 7})]$password = "password" # ok
$password = "abc123" # invalid value

12.3.17 Attributo ValidateSet

Questo attributo viene usato in un parametro script o variabile per specificare un set di valori validi per l'argomento del parametro. Gli argomenti seguenti vengono usati per definire le caratteristiche del parametro :

il nome del parametro Scopo
ValidValues (posizione 0)

Tipo: string[]

Il set di valori validi.

IgnoreCase (denominato)

Tipo: bool; Valore predefinito: $true

Specifica se la distinzione tra maiuscole e minuscole deve essere ignorata per i parametri di tipo string.

Se il parametro ha un tipo di matrice, ogni elemento della matrice di argomenti corrispondente deve corrispondere a un elemento del set di valori.

Si consideri una chiamata di funzione Test con il blocco param seguente e che viene chiamato come illustrato:

param ( [ValidateSet("Red", "Green", "Blue")]
    [string] $Color,

    [ValidateSet("up", "down", "left", "right", IgnoreCase =
        $false)]
    [string] $Direction

)

Test -Col "RED"    # case is ignored, is a member of the set
Test -Col "white"  # case is ignored, is not a member of the set

Test -Dir "up"     # case is not ignored, is a member of the set
Test -Dir "Up"     # case is not ignored, is not a member of the set

[ValidateSet(("Red", "Green", "Blue")]$color = "RED" # ok, case is ignored
$color = "Purple"  # case is ignored, is not a member of the set