12. Atrybuty

Obiekt atrybutu kojarzy wstępnie zdefiniowane informacje systemowe z elementem docelowym, który może być blokiem parametrów lub parametrem (%).8.10). Każdy obiekt atrybutu ma typ atrybutu.

Informacje udostępniane przez atrybut są również nazywane metadanymi. Metadane mogą być sprawdzane przez polecenie lub środowisko wykonawcze w celu kontrolowania sposobu przetwarzania danych przez polecenie lub przed uruchomieniem przez narzędzia zewnętrzne w celu kontrolowania sposobu przetwarzania lub konserwowania polecenia.

Do tego samego elementu docelowego można zastosować wiele atrybutów.

12.1 Specyfikacja atrybutu

Porada

Notacja ~opt~ w definicjach składni wskazuje, że jednostka leksyktyczna jest opcjonalna w składni.

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

Atrybut składa się z nazwy atrybutu i opcjonalnej listy argumentów pozycyjnej i nazwanej. Argumenty pozycyjne (jeśli są) poprzedzają nazwane argumenty. Nazwany argument składa się z prostej nazwy, opcjonalnie ze znakiem równości, po której następuje wyrażenie. Jeśli wyrażenie zostanie pominięte, przyjmowana jest $true wartość .

Nazwa atrybutu jest zarezerwowanym typem atrybutu ():12.3) lub typem atrybutu zdefiniowanym przez implementację.

12.2 Wystąpienia atrybutów

Wystąpienie atrybutu jest obiektem typu atrybutu. Wystąpienie reprezentuje atrybut w czasie uruchamiania.

Aby utworzyć obiekt pewnego atrybutu typu A, użyj notacji A(). Atrybut jest deklarowany przez dołączenie jego wystąpienia do klasy [], tak jak w pliku [A()]. Niektóre typy atrybutów mają parametry pozyacyjne i nazwane ();8.14), podobnie jak funkcje i polecenia cmdlet. Na przykład

[A(10,IgnoreCase=$true)]

Wyświetla wystąpienie typu A tworzone przy użyciu parametru pozycyjnego, którego wartość argumentu to 10, oraz nazwanego parametru IgnoreCase, którego wartość argumentu to $true.

12.3 Atrybuty zarezerwowane

Atrybuty opisane w poniższych sekcjach mogą służyć do rozszerzenia lub zmodyfikowania zachowania funkcji programu PowerShell, filtrów, skryptów i poleceń cmdlet.

12.3.1 Atrybut aliasu

Ten atrybut jest używany w parametrze script-parameter w celu określenia alternatywnej nazwy parametru. Parametr może mieć wiele aliasów, a każda nazwa aliasu musi być unikatowa w obrębie listy parametrów. Jednym z możliwych zastosowania jest użycie różnych nazw parametrów w różnych zestawach parametrów (zobacz ParameterSetName).

Argument atrybutu ma typ string[].

Rozważmy wywołanie funkcji Test1 , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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

Rozważmy wywołanie funkcji Test2 , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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

Polecenie cmdlet Get-ChildItem (alias Dir) dodaje do obiektu, że zwraca nową NoteProperty typu stringo nazwie PSPath.

12.3.2 Atrybut AllowEmptyCollection

Ten atrybut jest używany w parametrze script-parameter , aby umożliwić pustą kolekcję jako argument obowiązkowego parametru.

Rozważmy wywołanie funkcji Test , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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 Atrybut AllowEmptyString

Ten atrybut jest używany w parametrze script-parameter , aby umożliwić pusty ciąg jako argument obowiązkowego parametru.

Rozważmy wywołanie funkcji Test , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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 Atrybut AllowNull

Ten atrybut jest używany w parametrze script-parameter , aby $null jako argument obowiązkowego parametru, dla którego nie jest dostępna niejawna konwersja.

Rozważ wywołanie funkcji Test, które ma następujący blok param i który jest wywoływany w pokazany sposób:

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

Należy pamiętać, że drugi przypadek powyżej nie wymaga tego atrybutu; Istnieje już niejawna konwersja z na $null int.

12.3.5 Atrybut CmdletBinding

Ten atrybut jest używany na liście atrybutów bloku param funkcji , aby wskazać, że funkcja działa podobnie do polecenia cmdlet. W szczególności umożliwia ona funkcji uzyskiwanie dostępu do wielu metod i właściwości za pośrednictwem zmiennej $PsCmdlet przy użyciu bloków nazwanych początek, proces i koniec nazwanych bloków (";8.10.7).

Gdy ten atrybut jest obecny, argumenty pozycyjne, które nie mają pasujących parametrów pozycyjnego, powodują niepowodzenie powiązania parametru i $args nie są zdefiniowane. (Bez tego atrybutu $args wszystkie niedopasowane wartości argumentów pozywidalnych).

Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
SupportsShouldProcess (nazwane)

Typ: bool; Wartość domyślna: $false

Określa, czy funkcja obsługuje wywołania metody ShouldProcess, która jest używana do monitowania użytkownika o opinię, zanim funkcja zmieni system. Wartość $true oznacza, że tak. Wartość $false oznacza, że tak nie jest.

ConfirmImpact (nazwane)

Typ: ciąg; Wartość domyślna: "Średnia"

Określa poziom wpływu wykonywanej akcji. Wywołanie metody ShouldProcess wyświetla monit o potwierdzenie tylko wtedy, gdy argument ConfirmImpact jest większy lub równy wartości zmiennej $ConfirmPreference preferencji.

Możliwe wartości tego argumentu to:

Brak: Pomiń wszystkie żądania potwierdzenia.

Niski: wykonywana akcja ma niskie ryzyko utraty danych.

Średni: Wykonywana akcja ma średnie ryzyko utraty danych.

Wysoki: Wykonywana akcja ma wysokie ryzyko utraty danych.

Wartość właściwości $ConfirmPreference tak, aby tylko polecenia cmdlet o poziomie wpływu równym lub wyższym mogą żądać potwierdzenia przed wykonaniem operacji. Jeśli na przykład dla $ConfirmPreference wartość Średni, polecenia cmdlet z poziomem wpływu Średni lub Wysoki mogą żądać potwierdzenia. Żądania z polecenia cmdlet o niskim poziomie wpływu są pomijane.

DefaultParameterSetName (nazwane)

Typ: ciąg; Wartość domyślna: "__AllParameterSets"

Określa zestaw parametrów do użycia, jeśli nie można określić na podstawie argumentów. Zobacz nazwany argument ParameterSetName w parametrze atrybutu ([][12.3.7][][12.3.7]).

PositionalBinding (nazwane)

Typ: bool; Wartość domyślna: $true

Określa, czy powiązanie pozyacyjne jest obsługiwane. Wartość tego argumentu jest ignorowana, jeśli jakiekolwiek parametry określają wartości inne niż domyślne dla nazwanego argumentu Position lub nazwanego argumentu ParameterSetName w parametrze atrybutu ([][12.3.7][][][12.3.7]). W przeciwnym razie, jeśli argument jest $false wtedy parametry nie są pozyacyjne, w przeciwnym razie parametry są przypisywane do pozycji na podstawie kolejności, w których określono parametry.

Oto przykład struktury do używania tego atrybutu:

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

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

12.3.6 Atrybut OutputType

Ten atrybut jest używany na liście atrybutów bloku param w celu określenia zwracanych typów. Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
Typ (pozycja 0)

Typ: string[] lub tablica literałów typu

Lista typów zwracanych wartości.

ParameterSetName (nazwane)

Typ: string[]

Określa zestawy parametrów, które zwracają typy wskazywane przez odpowiednie elementy typu parametru.

Oto kilka przykładów użycia tego atrybutu:

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

12.3.7 Atrybut parametru

Ten atrybut jest używany w parametrze script-parameter. Następujące nazwane argumenty są używane do definiowania właściwości parametru:

Parametr Cel
HelpMessage (nazwane)

Typ: ciąg

Ten argument określa komunikat, który ma zawierać krótki opis parametru. Ten komunikat jest używany w sposób zdefiniowany w implementacji, gdy funkcja lub polecenie cmdlet jest uruchomione, ale obowiązkowy parametr z parametrem HelpMessage nie ma odpowiadającego mu argumentu.

W poniższym przykładzie pokazano deklarację parametru, która zawiera opis parametru.

param ( [Parameter(Mandatory = $true,
HelpMessage = "Tablica nazw komputerów.")]
[string[]] $ComputerName )

Windows PowerShell: jeśli nie podano wymaganego parametru, środowisko uruchomieniowe monituje użytkownika o wartość parametru. Okno dialogowe monitu zawiera tekst HelpMessage.

Obowiązkowy (nazwany)

Typ: bool; Wartość domyślna: $false

Ten argument określa, czy parametr jest wymagany w danym zestawie parametrów (zobacz argument ParameterSetName poniżej). Wartość $true oznacza, że jest. Wartość $false wskazuje, że tak nie jest.

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

Windows PowerShell: jeśli nie podano wymaganego parametru, środowisko uruchomieniowe monituje użytkownika o wartość parametru. Okno dialogowe monitu zawiera tekst HelpMessage, jeśli jest wyświetlany.

ParameterSetName (nazwane)

Typ: ciąg; Wartość domyślna: "__AllParameterSets"

Istnieje możliwość napisania pojedynczej funkcji lub polecenia cmdlet, które może wykonywać różne akcje dla różnych scenariuszy. W tym celu ujawniane są różne grupy parametrów w zależności od akcji, które chce podjąć. Takie grupowania parametrów są nazywane zestawami parametrów.

Argument ParameterSetName określa zestaw parametrów, do którego należy parametr. To zachowanie oznacza, że każdy zestaw parametrów musi mieć jeden unikatowy parametr, który nie jest członkiem żadnego innego zestawu parametrów.

W przypadku parametrów należących do wielu zestawów parametrów dodaj atrybut Parametr dla każdego zestawu parametrów. Dzięki temu parametr może być zdefiniowany inaczej dla każdego zestawu parametrów.

Zestaw parametrów, który zawiera wiele parametrów pozytywnych, musi definiować unikatowe pozycje dla każdego parametru. Żadne dwa parametry pozyacyjne nie mogą określić tej samej pozycji.

Jeśli dla parametru nie określono żadnego zestawu parametrów, parametr należy do wszystkich zestawów parametrów.

Gdy zdefiniowano wiele zestawów parametrów, nazwany argument DefaultParameterSetName atrybutu CmdletBinding ([][12.3.5][][12.3.5]) służy do określania domyślnego zestawu parametrów. Środowisko uruchomieniowe używa domyślnego zestawu parametrów, jeśli nie może określić zestawu parametrów do użycia na podstawie informacji podanych przez polecenie lub zgłasza wyjątek, jeśli nie określono domyślnego zestawu parametrów.

W poniższym przykładzie przedstawiono funkcję Test z deklaracją parametru dwóch parametrów należących do dwóch różnych zestawów parametrów i trzeci parametr należący do obu zestawów:

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

[Parameter(Mandatory = $true,
ParameterSetName = "Użytkownik")]
[string[]] $UserName,

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

if ($PsCmdlet.ParameterSetName -eq "Computer")
{
# dojście do zestawu parametrów "Komputer"
}

elseif ($PsCmdlet.ParameterSetName -eq "Użytkownik")
{
# dojście do zestawu parametrów "Użytkownik"
}

}

Test -ComputerName "Mars","Venus" -SharedParam 10
Test -UserName "Mary","Jack"
Test -UserName "Mary","Jack" -SharedParam 20

Pozycja (nazwana)

Typ: int

Ten argument określa pozycję parametru na liście argumentów. Jeśli ten argument nie zostanie określony, nazwa parametru lub jego alias musi być określony jawnie, gdy parametr jest ustawiony. Jeśli żaden z parametrów funkcji nie ma pozycji, pozycje są przypisywane do każdego parametru w zależności od kolejności, w jakiej są odbierane.

W poniższym przykładzie pokazano deklarację parametru, którego wartość musi być określona jako pierwszy argument podczas wywoływania funkcji.

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

ValueFromPipeline (nazwane)

Typ: bool; Wartość domyślna: $false

Ten argument określa, czy parametr akceptuje dane wejściowe z obiektu potoku. Wartość $true oznacza, że tak. Wartość $false oznacza, że tak nie jest.

Określ $true, czy funkcja lub polecenie cmdlet uzyskuje dostęp do kompletnego obiektu, a nie tylko do właściwości obiektu.

Tylko jeden parametr w zestawie parametrów może zadeklarować wartość ValueFromPipeline jako $true.

W poniższym przykładzie pokazano deklarację parametru obowiązkowego, $ComputerName, która akceptuje obiekt wejściowy przekazywany do funkcji z potoku.

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

Aby uzyskać przykład użycia tego parametru w połączeniu z atrybutem Alias, zobacz [][12.3.1][][12.3.1].

ValueFromPipelineByPropertyName (nazwana)

Typ: bool; Wartość domyślna: $false

Ten argument określa, czy parametr pobiera swoją wartość z właściwości obiektu potoku, który ma taką samą nazwę, jak ten parametr lub alias. Wartość $true oznacza, że tak. Wartość $false oznacza, że tak nie jest.

Określ $true jeśli są spełnione następujące warunki: parametr uzyskuje dostęp do właściwości obiektu potokowego, a właściwość ma taką samą nazwę jak parametr lub właściwość ma taki sam alias jak parametr.

Parametr o parametrze ValueFromPipelineByPropertyName ustawionym na $true nie musi mieć parametru w tym samym zestawie z wartością ValueFromPipeline ustawioną na $true.

Jeśli funkcja ma parametr $ComputerName, a obiekt potoku ma właściwość ComputerName, wartość właściwości ComputerName jest przypisywana do $ComputerName parametru funkcji:

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

Wiele parametrów w zestawie parametrów może definiować wartość ValueFromPipelineByPropertyName jako $true. Mimo że pojedynczy obiekt wejściowy nie może być powiązany z wieloma parametrami, różne właściwości w tym obiekcie wejściowym mogą być powiązane z różnymi parametrami.

Podczas wiązania parametru z właściwością obiektu wejściowego środowisko uruchomieniowe najpierw szuka właściwości o takiej samej nazwie jak parametr. Jeśli taka właściwość nie istnieje, środowisko uruchomieniowe szuka aliasów dla tego parametru w kolejności deklaracji, wybierając pierwszy taki alias, dla którego istnieje właściwość.

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

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

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

proces { ... }
}

Get-Date | Process-Date

ValueFromRemainingArguments (nazwane)

Typ: bool; Wartość domyślna: $false

Ten argument określa, czy parametr akceptuje wszystkie pozostałe argumenty, które nie są powiązane z parametrami funkcji. Wartość $true oznacza, że tak. Wartość $false oznacza, że tak nie jest.

W poniższym przykładzie pokazano parametr $others który akceptuje wszystkie pozostałe argumenty obiektu wejściowego przekazywanego do funkcji Test:

param ( [parameter(Mandatory = $true)][int] $p 1,
[parameter(Mandatory = $true)] [int] $p 2,
[parameter(ValueFromRemainingArguments = $true)]
[string[]] $others )

Test 10 20 # $others ma długość 0
Test 10 20 30 40 # $others ma długość 2, wartość 30,40

Implementacja może również definiować inne atrybuty.

Dostępne są również następujące atrybuty:

  • HelpMessageBaseName: określa lokalizację, w której znajdują się identyfikatory zasobów. Na przykład ten parametr może określić zestaw zasobów, który zawiera komunikaty pomocy, które mają być zlokalizowane.
  • HelpMessageResourceId: określa identyfikator zasobu dla komunikatu pomocy.

12.3.8 Atrybut PSDefaultValue

Ten atrybut jest używany w parametrze script-parameter w celu zapewnienia dodatkowych informacji o parametrze. Atrybut jest używany w sposób zdefiniowany w implementacji. Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
Pomoc (nazwana)

Typ: ciąg

Ten argument określa komunikat, który ma zawierać krótki opis wartości domyślnej parametru. Ten komunikat jest używany w sposób zdefiniowany w implementacji.

Windows PowerShell: komunikat jest używany jako część opisu parametru tematu pomocy wyświetlanego przez polecenie cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help).

Wartość (nazwana)

Typ: obiekt

Ten argument określa wartość, która ma być wartością domyślną parametru. Wartość jest używana w sposób zdefiniowany w implementacji.

Windows PowerShell: wartość jest używana jako część opisu parametru tematu pomocy wyświetlanego przez [Get-Helpcmdlet](xref:Microsoft.PowerShell.Core.Get-Help), gdy właściwość Help nie jest określona.

12.3.9 Atrybut SupportsWildcards

Ten atrybut jest używany w parametrze script-parameter w celu zapewnienia dodatkowych informacji o parametrze. Atrybut jest używany w sposób zdefiniowany w implementacji.

Ten atrybut jest używany jako część opisu parametru tematu pomocy wyświetlanego przez polecenie cmdlet Get-Help .

12.3.10 Atrybut ValidateCount

Ten atrybut jest używany w parametrze script-parameter w celu określenia minimalnej i maksymalnej liczby wartości argumentu, które parametr może akceptować. Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
MinLength (pozycja 0)

Typ: int

Ten argument określa minimalną dozwoloną liczbę wartości argumentów.

MaxLength (pozycja 1)

Typ: int

Ten argument określa maksymalną dozwoloną liczbę wartości argumentów.

W przypadku braku tego atrybutu lista wartości argumentu odpowiadającego parametrowi może mieć dowolną długość.

Rozważ wywołanie funkcji Test, które ma następujący blok param i który jest wywoływany w pokazany sposób:

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 Atrybut ValidateLength

Ten atrybut jest używany w parametr-skryptu lub zmiennej, aby określić minimalną i maksymalną długość argumentu parametru, który musi mieć ciąg typu. Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
MinLength (pozycja 0)

Typ: int

Ten argument określa minimalną dozwoloną liczbę znaków.

MaxLength (pozycja 1)

Typ: int

Ten argument określa maksymalną dozwoloną liczbę znaków.

W przypadku braku tego atrybutu argument odpowiadający parametrowi może mieć dowolną długość.

Rozważ wywołanie funkcji Test, które ma następujący blok param i który jest wywoływany w pokazany sposób:

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 Atrybut ValidateNotNull

Ten atrybut jest używany w parametr-skryptu lub zmiennej, aby określić, że argument $null parametru nie może być lub być kolekcją zawierającą element o wartości null.

Rozważmy wywołanie funkcji Test , które ma następujący blok param, który jest wywoływany jako "pokazany:

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 Atrybut ValidateNotNullOrEmpty

Ten atrybut jest używany w elemencie script-parameter lub zmiennej w celu określenia, że argument , jeśli parametr nie może być $null, pusty ciąg lub pusta tablica albo jest kolekcją zawierającą $null lub pusty element ciągu.

Rozważmy wywołanie funkcji Test , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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 Atrybut ValidatePattern

Ten atrybut jest używany w parametrze skryptu lub zmiennej w celu określenia wyrażenia regularnego w celu dopasowania wzorca argumentu parametru. Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
RegexString (pozycja 0)

Typ: ciąg

Wyrażenie regularne używane do weryfikowania argumentu parametru

Opcje (nazwane)

Typ: Opcja wyrażenia regularnego

Zobacz [][4.2.6.4][][4.2.6.4] dla dozwolonych wartości.

Jeśli argument jest kolekcją, każdy element w kolekcji musi być zgodne ze wzorcem.

Rozważmy wywołanie funkcji Test , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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 Atrybut ValidateRange

Ten atrybut jest używany w parametrze skryptu lub zmiennej w celu określenia minimalnych i maksymalnych wartości argumentu parametru. Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
MinRange (pozycja 0)

Typ: obiekt

Ten argument określa minimalną dozwoloną wartość.

MaxRange (pozycja 1)

Typ: obiekt

Ten argument określa maksymalną dozwoloną wartość.

W przypadku braku tego atrybutu nie ma żadnych ograniczeń zakresu.

Rozważmy wywołanie funkcji Test1 , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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

Rozważ wywołanie funkcji Test2, które ma następujący blok i wywołania param:

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

Rozważmy wywołanie funkcji Test3 , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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 Atrybut ValidateScript

Ten atrybut jest używany w parametrze skryptu lub zmiennej w celu określenia skryptu, który ma być używany do weryfikowania argumentu parametru.

Argument w pozycji 1 jest wyrażeniem-bloku-skryptu.

Rozważmy wywołanie funkcji Test , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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 Atrybut ValidateSet

Ten atrybut jest używany w parametr-skryptu lub zmiennej do określenia zestawu prawidłowych wartości dla argumentu parametru. Następujące argumenty służą do definiowania właściwości parametru:

Nazwa parametru Cel
ValidValues (pozycja 0)

Typ: string[]

Zestaw prawidłowych wartości.

IgnoreCase (nazwane)

Typ: bool; Wartość domyślna: $true

Określa, czy przypadek ma być ignorowany dla parametrów typu ciąg.

Jeśli parametr ma typ tablicy, każdy element odpowiedniej tablicy argumentów musi odpowiadać elementowi zestawu wartości.

Rozważmy wywołanie funkcji Test , które ma następujący blok param, który jest wywoływany w pokazany sposób:

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