12. Attribut

Ett attributobjekt associerar fördefinierad systeminformation med ett målelement, som kan vara ett parameterblock eller en parameter (8.10). Varje attributobjekt har en attributtyp.

Information som tillhandahålls av ett attribut kallas även metadata. Metadata kan undersökas av kommandot eller körningsmiljön för att styra hur kommandot bearbetar data eller innan körningen av externa verktyg för att styra hur själva kommandot bearbetas eller underhålls.

Flera attribut kan tillämpas på samma målelement.

12.1 Attributspecifikation

Tips

Notationen ~opt~ i syntaxdefinitionerna anger att den lexikala entiteten är valfri i syntaxen.

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

Ett attribut består av ett attributnamn och en valfri lista med positionsargument och namngivna argument. Positionsargumenten (om sådana finns) föregår de namngivna argumenten. Ett namngivet argument består av ett enkelt namn, eventuellt följt av ett likhetstecken och följt av ett uttryck. Om uttrycket utelämnas antas $true värdet .

Attributnamnet är en typ av reserverat attribut (·12.3) eller någon implementeringsdefinierad attributtyp.

12.2 Attributinstanser

En attributinstans är ett objekt av en attributtyp. Instansen representerar ett attribut vid körning.

Om du vill skapa ett objekt av någon attributtyp A använder du notationen A(). Ett attribut deklareras genom att omsluta dess instans i [], som i [A()]. Vissa attributtyper har positionsparametrar och namngivna parametrar (8.14), precis som funktioner och cmdlets. Exempel:

[A(10,IgnoreCase=$true)]

visar en instans av typ A som skapas med hjälp av en positionsparameter vars argumentvärde är 10 och en namngiven parameter, IgnoreCase, vars argumentvärde är $true.

12.3 Reserverade attribut

Attributen som beskrivs i följande avsnitt kan användas för att utöka eller ändra beteendet för PowerShell-funktioner, filter, skript och cmdlets.

12.3.1 Aliasattributet

Det här attributet används i en script-parameter för att ange ett alternativt namn för en parameter. En parameter kan ha flera alias och varje aliasnamn måste vara unikt inom en parameterlista. En möjlig användning är att ha olika namn för en parameter i olika parameteruppsättningar (se ParameterSetName).

Attributargumentet har typsträngen[].

Överväg ett funktionsanrop Test1 som har följande parameterblock och som anropas enligt bilden:

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

Överväg ett funktionsanrop Test2 som har följande parameterblock och som anropas enligt bilden:

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

Cmdleten Get-ChildItem (alias Dir) lägger till i objektet och returnerar en ny NoteProperty av typen string, med namnet PSPath.

12.3.2 Attributet AllowEmptyCollection

Det här attributet används i en script-parameter för att tillåta en tom samling som argument för en obligatorisk parameter.

Överväg ett funktionsanrop Test som har följande parameterblock och som anropas enligt bilden:

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

Det här attributet används i en script-parameter för att tillåta en tom sträng som argument för en obligatorisk parameter.

Överväg ett funktionsanrop Test som har följande parameterblock och som anropas enligt bilden:

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

Det här attributet används i en skriptparameter för att $null som argument för en obligatorisk parameter som ingen implicit konvertering är tillgänglig för.

Överväg ett funktionsanrop Test som har följande parameterblock och som anropas enligt bilden:

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

Observera att det andra fallet ovan inte behöver det här attributet. det finns redan en implicit konvertering från $null till int.

12.3.5 Attributet CmdletBinding

Det här attributet används i attributlistan över param-block för en funktion för att indikera att funktionen fungerar ungefär som en cmdlet. Mer specifikt ger den funktioner åtkomst till ett antal metoder och egenskaper via $PsCmdlet-variabeln genom att använda start, process och slut på namngivna block (8.10.7).

När det här attributet finns gör positionsargument som inte har några matchande positionsparametrar att parameterbindningen misslyckas och $args inte definieras. (Utan det här $args skulle ta på sig några omatchade värden för positionsargument.)

Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
SupportsShouldProcess (med namnet)

Typ: bool; Standardvärde: $false

Anger om funktionen stöder anrop till metoden ShouldProcess, som används för att be användaren om feedback innan funktionen gör en ändring i systemet. Värdet för $true anger att det gör det. Värdet för $false anger att det inte gör det.

ConfirmImpact (namngiven)

Typ: sträng; Standardvärde: "Medel"

Anger effektnivån för den utförda åtgärden. Anropet till metoden ShouldProcess visar bara en bekräftelsefråga när argumentet ConfirmImpact är större än eller lika med värdet för $ConfirmPreference inställningsvariabeln.

Möjliga värden för det här argumentet är:

Ingen: Ignorera alla begäranden om bekräftelse.

Låg: Den åtgärd som utförs har en låg risk att förlora data.

Medel: Den åtgärd som utförs har en medelstor risk att förlora data.

Hög: Den åtgärd som utförs har en hög risk att förlora data.

Värdet för $ConfirmPreference kan anges så att endast cmdlets med en lika stor eller högre effektnivå kan begära bekräftelse innan de utför åtgärden. Om du till exempel $ConfirmPreference på Medel kan cmdlets med en medelhög eller hög effektnivå begära bekräftelse. Begäranden från cmdlets med låg påverkansnivå ignoreras.

DefaultParameterSetName (med namnet)

Typ: sträng; Standardvärde: "__AllParameterSets"

Anger den parameter som ska användas om det inte går att fastställa från argumenten. Se det namngivna argumentet ParameterSetName i attributet Parameter ([\12.3.7][\12.3.7]).

PositionalBinding (med namnet)

Typ: bool; Standardvärde: $true

Anger om positionsbindning stöds eller inte. Värdet för det här argumentet ignoreras om några parametrar anger icke-standardvärden för antingen den namngivna argumentpositionen eller det namngivna argumentet ParameterSetName i attributet Parameter ([\12.3.7][\12.3.7]). Om argumentet annars är $false är inga parametrar positionsbaserade, annars tilldelas parametrarna en position baserat på den ordning som parametrarna anges i.

Här är ett exempel på ramverket för att använda det här attributet:

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

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

12.3.6 Attributet OutputType

Det här attributet används i attributlistan över param-block för att ange vilka typer som returneras. Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
Typ (position 0)

Typ: sträng[] eller matris av typen literaler

En lista över de typer av värden som returneras.

ParameterSetName (namngiven)

Typ: sträng[]

Anger de parameteruppsättningar som returnerar de typer som anges av motsvarande element i parametern Type.

Här följer flera exempel på hur det här attributet används:

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

12.3.7 Parameterattributet

Det här attributet används i en script-parameter. Följande namngivna argument används för att definiera parameterns egenskaper:

Parameter Syfte
HelpMessage (namngiven)

Typ: sträng

Det här argumentet anger ett meddelande som är avsett att innehålla en kort beskrivning av parametern. Det här meddelandet används på ett implementeringsdefinierat sätt när funktionen eller cmdleten körs men en obligatorisk parameter som har ett HelpMessage inte har något motsvarande argument.

I följande exempel visas en parameterdeklaration som innehåller en beskrivning av parametern.

param ( [Parameter(Mandatory = $true,
HelpMessage = "En matris med datornamn.")]
[string[]] $ComputerName )

Windows PowerShell: Om en obligatorisk parameter inte anges uppmanar körningen användaren att ange ett parametervärde. Dialogrutan innehåller texten HelpMessage.

Obligatoriskt (namngivet)

Typ: bool; Standardvärde: $false

Det här argumentet anger om parametern krävs i den angivna parameteruppsättningen (se ParameterSetName-argumentet nedan). Värdet för $true anger att det är det. Värdet för $false anger att det inte är det.

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

Windows PowerShell: Om en obligatorisk parameter inte anges uppmanar körningen användaren att ange ett parametervärde. Dialogrutan innehåller texten HelpMessage, om det finns någon.

ParameterSetName (namngiven)

Typ: sträng; Standardvärde: "__AllParameterSets"

Det går att skriva en enda funktion eller cmdlet som kan utföra olika åtgärder för olika scenarier. Den gör detta genom att exponera olika grupper av parametrar beroende på vilken åtgärd den vill vidta. Sådana parametergrupper kallas parameteruppsättningar.

Argumentet ParameterSetName anger parameteruppsättningen som en parameter tillhör. Det här beteendet innebär att varje parameteruppsättning måste ha en unik parameter som inte är medlem i någon annan parameteruppsättning.

För parametrar som tillhör flera parameteruppsättningar lägger du till ett Parameter-attribut för varje parameteruppsättning. Detta gör att parametern kan definieras på olika sätt för varje parameteruppsättning.

En parameteruppsättning som innehåller flera positionsparametrar måste definiera unika positioner för varje parameter. Inga två positionsparametrar kan ange samma position.

Om ingen parameteruppsättning har angetts för en parameter tillhör parametern alla parameteruppsättningar.

När flera parameteruppsättningar definieras används det namngivna argumentet DefaultParameterSetName för attributet CmdletBinding ([·12.3.5][·12.3.5]) för att ange standardparameteruppsättningen. Körningen använder standardparameteruppsättningen om den inte kan fastställa vilken parameteruppsättning som ska användas baserat på informationen som tillhandahålls av kommandot, eller om inget standardparameteruppsättning har angetts.

I följande exempel visas funktionen Test med en parameterdeklaration med två parametrar som tillhör två olika parameteruppsättningar och en tredje parameter som tillhör båda uppsättningarna:

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

[Parameter(Mandatory = $true,
ParameterSetName = "Användare")]
[string[]] $UserName,

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

if ($PsCmdlet.ParameterSetName -eq "Computer")
{
# hantera parameteruppsättningen "Dator"
}

elseif ($PsCmdlet.ParameterSetName -eq "Användare")
{
# hantera parameteruppsättningen "Användare"
}

}

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

Position (namngiven)

Typ: int

Det här argumentet anger positionen för parametern i argumentlistan. Om det här argumentet inte anges måste parameternamnet eller dess alias anges uttryckligen när parametern anges. Om ingen av parametrarna i en funktion har positioner tilldelas positioner till varje parameter baserat på i vilken ordning de tas emot.

I följande exempel visas deklarationen för en parameter vars värde måste anges som det första argumentet när funktionen anropas.

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

ValueFromPipeline (namngiven)

Typ: bool; Standardvärde: $false

Det här argumentet anger om parametern accepterar indata från ett pipeline-objekt. Värdet för $true anger att det gör det. Värdet för $false anger att det inte gör det.

Ange $true om funktionen eller cmdleten kommer åt hela objektet, inte bara en egenskap för objektet.

Endast en parameter i en parameteruppsättning kan deklarera ValueFromPipeline som $true.

I följande exempel visas parameterdeklarationen för en obligatorisk parameter, $ComputerName, som accepterar det indataobjekt som skickas till funktionen från pipelinen.

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

Ett exempel på hur du använder den här parametern tillsammans med aliasattributet finns i [â 12.3.1][â 12.3.1].

ValueFromPipelineByPropertyName (med namnet)

Typ: bool; Standardvärde: $false

Det här argumentet anger om parametern tar sitt värde från en egenskap för ett pipelineobjekt som har antingen samma namn eller samma alias som den här parametern. Värdet för $true anger att det gör det. Värdet för $false anger att det inte gör det.

Ange $true om följande villkor är sanna: parametern kommer åt en egenskap för piped-objektet och egenskapen har samma namn som parametern, eller om egenskapen har samma alias som parametern.

En parameter med ValueFromPipelineByPropertyName inställt på $true behöver inte ha en parameter i samma uppsättning med ValueFromPipeline inställt på $true.

Om en funktion har $ComputerName parameter och piped-objektet har egenskapen ComputerName tilldelas värdet för egenskapen ComputerName till $ComputerName för funktionen:

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

Flera parametrar i en parameteruppsättning kan definiera ValueFromPipelineByPropertyName som $true. Även om ett enda indataobjekt inte kan bindas till flera parametrar kan olika egenskaper i det indataobjektet bindas till olika parametrar.

När du binder en parameter med en egenskap för ett indataobjekt letar körningsmiljön först efter en egenskap med samma namn som parametern. Om en sådan egenskap inte finns söker körningsmiljön efter alias till den parametern, i deklarationsordningen, och väljer det första sådana alias som det finns en egenskap för.

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

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

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

process { ... }
}

Get-Date | Process-Date

ValueFromRemainingArguments (med namnet)

Typ: bool; Standardvärde: $false

Det här argumentet anger om parametern accepterar alla återstående argument som inte är bundna till funktionens parametrar. Värdet för $true anger att det gör det. Värdet för $false anger att det inte gör det.

I följande exempel visas en parameter $others som accepterar alla återstående argument för det indataobjekt som skickas till funktionen Test:

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

Test 10 20 # $others har längd 0
Test 10 20 30 40 # $others längd 2, värdet 30,40

En implementering kan även definiera andra attribut.

Följande attribut tillhandahålls också:

  • HelpMessageBaseName: Anger den plats där resursidentifierare finns. Den här parametern kan till exempel ange en resursgrupp som innehåller hjälpmeddelanden som ska lokaliseras.
  • HelpMessageResourceId: Anger resursidentifieraren för ett hjälpmeddelande.

12.3.8 Attributet PSDefaultValue

Det här attributet används i en script-parameter för att ge ytterligare information om parametern. Attributet används på ett definierat sätt för implementering. Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
Hjälp (namngiven)

Typ: sträng

Det här argumentet anger ett meddelande som är avsett att innehålla en kort beskrivning av standardvärdet för en parameter. Det här meddelandet används på ett implementeringsdefinierat sätt.

Windows PowerShell: Meddelandet används som en del av beskrivningen av parametern för hjälpavsnittet som visas av cmdleten [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help).

Värde (namngivet)

Typ: objekt

Det här argumentet anger ett värde som är avsett att vara standardvärdet för en parameter. Värdet används på ett implementeringsdefinierat sätt.

Windows PowerShell: Värdet används som en del av beskrivningen av parametern för hjälpavsnittet som visas av [Get-Helpcmdlet](xref:Microsoft.PowerShell.Core.Get-Help) när egenskapen Hjälp inte har angetts.

12.3.9 Attributet SupportsWildcards

Det här attributet används i en script-parameter för att ge ytterligare information om parametern. Attributet används på ett definierat sätt för implementering.

Det här attributet används som en del av beskrivningen av parametern för hjälpavsnittet som visas av cmdleten Get-Help .

12.3.10 Attributet ValidateCount

Det här attributet används i en skriptparameter för att ange det lägsta och högsta antalet argumentvärden som parametern kan acceptera. Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
MinLength (position 0)

Typ: int

Det här argumentet anger det minsta antal argumentvärden som tillåts.

MaxLength (position 1)

Typ: int

Det här argumentet anger det maximala antalet argumentvärden som tillåts.

I avsaknad av det här attributet kan parameterns motsvarande argumentvärdeslista ha valfri längd.

Överväg ett funktionsanrop Test som har följande param-block och som anropas enligt bilden:

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

Det här attributet används i en skriptparameter eller variabel för att ange den minsta och högsta längden för parameterns argument, som måste ha typsträng. Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
MinLength (position 0)

Typ: int

Det här argumentet anger det minsta antal tecken som tillåts.

MaxLength (position 1)

Typ: int

Det här argumentet anger det maximala antalet tecken som tillåts.

I avsaknad av det här attributet kan parameterns motsvarande argument vara av valfri längd.

Överväg ett funktionsanrop Test som har följande param-block och som anropas enligt bilden:

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

Det här attributet används i en skriptparameter eller variabel för att ange att argumentet för parametern $null inte får vara eller vara en samling som innehåller ett nullvärdeselement.

Överväg ett funktionsanrop Test som har följande param-block och som anropas som "visas:

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

Det här attributet används i en skriptparameter eller variabel för att ange att argumentet om parametern inte kan $null, en tom sträng eller en tom matris eller vara en samling som innehåller ett $null-värde eller tomt strängelement.

Överväg ett funktionsanrop Test som har följande param-block och som anropas enligt bilden:

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

Det här attributet används i en skriptparameter eller variabel för att ange ett reguljärt uttryck som matchar mönstret för parameterns argument. Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
RegexString (position 0)

Typ: Sträng

Ett reguljärt uttryck som används för att verifiera parameterns argument

Alternativ (namngivna)

Typ: Regular-Expression-Option

De tillåtna värdena finns i [ân 4.2.6.4][4.2.6.4].

Om argumentet är en samling måste varje element i samlingen matcha mönstret.

Överväg ett funktionsanrop Test som har följande param-block och som anropas enligt bilden:

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

Det här attributet används i en skriptparameter eller variabel för att ange de lägsta och högsta värdena för parameterns argument. Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
MinRange (position 0)

Typ: objekt

Det här argumentet anger det minsta tillåtna värdet.

MaxRange (position 1)

Typ: objekt

Det här argumentet anger det högsta tillåtna värdet.

I avsaknad av det här attributet finns det ingen begränsning av intervallet.

Överväg ett funktionsanrop Test1 som har följande param-block och som anropas enligt bilden:

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

Överväg ett funktionsanrop Test2 som har följande parameterblock och anrop:

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

Överväg ett funktionsanrop Test3 som har följande param-block och som anropas enligt bilden:

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

Det här attributet används i en skriptparameter eller variabel för att ange ett skript som ska användas för att validera parameterns argument.

Argumentet i position 1 är ett script-block-expression.

Överväg ett funktionsanrop Test som har följande param-block och som anropas enligt bilden:

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

Det här attributet används i en skriptparameter eller variabel för att ange en uppsättning giltiga värden för argumentet för parametern. Följande argument används för att definiera parameterns egenskaper:

Parameternamn Syfte
ValidValues (position 0)

Typ: sträng[]

Uppsättningen giltiga värden.

IgnoreCase (namngiven)

Typ: bool; Standardvärde: $true

Anger om case ska ignoreras för parametrar av typen sträng.

Om parametern har en matristyp måste varje element i motsvarande argumentmatris matcha ett element i värdeuppsättningen.

Överväg ett funktionsanrop Test som har följande param-block och som anropas enligt bilden:

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