12. Attribut

Redaktionell anteckning

Viktig

Windows PowerShell Language Specification 3.0 publicerades i december 2012 och baseras på Windows PowerShell 3.0. Den här specifikationen återspeglar inte det aktuella tillståndet för PowerShell. Det finns ingen plan för att uppdatera den här dokumentationen för att återspegla det aktuella tillståndet. Den här dokumentationen presenteras här för historisk referens.

Specifikationsdokumentet är tillgängligt som ett Microsoft Word-dokument från Microsoft Download Center på: https://www.microsoft.com/download/details.aspx?id=36389 Att Word-dokumentet har konverterats för presentation här på Microsoft Learn. Under konverteringen har vissa redaktionella ändringar gjorts för att anpassa formateringen för Docs-plattformen. Vissa stavfel och mindre fel har korrigerats.

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

Information som tillhandahålls av ett attribut kallas även metadata. Metadata kan granskas av kommandot eller körningsmiljön för att styra hur kommandot bearbetar data eller före körningstiden 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

Den ~opt~ notationen 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 positionella och namngivna argument. Positionsargumenten (om några) 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 värdet $true.

attributnamn är en reserverad attributtyp (§12.3) eller någon implementeringsdefinierad attributtyp.

12.2 Attributinstanser

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

Om du vill skapa ett objekt av någon attributtyp Aanvänder du notationen A(). Ett attribut deklareras genom att dess instans omsluts i [], som i [A()]. Vissa attributtyper har positionella och namngivna parametrar (§8.14), precis som funktioner och cmdletar. Till exempel

[A(10,IgnoreCase=$true)]

visar en instans av typen A 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 cmdletar.

12.3.1 Aliasattributet

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

Attributargumentet har typen string[].

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

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 paramblock och som anropas enligt följande:

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

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

12.3.2 Attributet AllowEmptyCollection

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

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

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 skriptparameter 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 paramblock och som anropas enligt följande:

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 tillåta $null som argument för en obligatorisk parameter som ingen implicit konvertering är tillgänglig för.

Överväg funktionsanropet Test som har följande paramblock och som visas nedan:

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 CmdletBinding-attributet

Det här attributet används i attributlista av param-block för en funktion för att indikera att funktionen fungerar ungefär som en cmdlet. Mer specifikt gör det möjligt för funktioner att komma åt ett antal metoder och egenskaper via $PSCmdlet variabeln med hjälp av begin, process och end named blocks (§8.10.7).

När det här attributet finns kan positionsargument som inte har några matchande positionsparametrar orsaka att parameterbindningen misslyckas och $args inte definieras. (Utan det här attributet skulle $args ta på sig icke-matchade positionella argumentvärden.)

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

parameternamn Syfte
SupportsShouldProcess (namngiven)

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 ändrar systemet. Värdet $true anger att det gör det. Värdet $false anger att det inte gör det.

ConfirmImpact (med namnet)

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

Anger påverkansnivån för den åtgärd som utförts. 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 låg risk att förlora data.

Medel: Den utförda åtgärden har en medelhög risk att förlora data.

Hög: Den utförda åtgärden har en hög risk att förlora data.

Värdet för $ConfirmPreference kan anges så att endast cmdletar med samma eller högre effektnivå kan begära bekräftelse innan de utför sin åtgärd. Om $ConfirmPreference till exempel är inställt på Medium kan cmdletar med en medelhög eller hög påverkansnivå begära bekräftelse. Begäranden från cmdletar med låg påverkansnivå ignoreras.

DefaultParameterSetName (namngiven)

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

Anger den parameteruppsättning som ska användas om det inte kan fastställas utifrån argumenten. Se det namngivna argumentet ParameterSetName i attributet Parameter ([§12.3.7][§12.3.7]).

PositionalBinding (namngiven)

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 det namngivna argumentet Position eller det namngivna argumentet ParameterSetName i attributet Parameter ([§12.3.7][§12.3.7]). Annars, om argumentet är $false då inga parametrar är positionella, annars tilldelas parametrar en position baserat på den ordning som parametrarna anges.

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 attributlista av 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: string[] eller matris av typen literaler

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

ParameterSetName (med namnet)

Typ: sträng[]

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

Här är flera exempel på det här attributets användning:

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

12.3.7 Parameterattributet

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

Parameter Syfte
HelpMessage (med namnet)

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 en 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 tillhandahålls uppmanar runtime användaren att ange ett parametervärde. Prompt-dialogrutan innehåller texten "HelpMessage."

Obligatoriskt (namngivet)

Typ: bool; Standardvärde: $false

Det här argumentet anger om parametern krävs inom den angivna parameteruppsättningen (se ParameterSetName-argumentet nedan). Ett värde på $true indikerar att det är sant. Värdet $false anger att det inte är det.

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

Windows PowerShell: Om en obligatorisk parameter inte tillhandahålls uppmanar runtime användaren att ange ett parametervärde. Uppmaningsdialogrutan inkluderar hjälpmeddelandetexten, om det finns någon.

ParameterSetName (med namnet)

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

Det går att skriva en enskild 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 parameterattribut för varje parameteruppsättning. På så sätt kan parametern 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 genererar ett undantag om ingen standardparameteruppsättning har angetts.

I följande exempel visas ett funktionstest 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")]
[sträng[]] $ComputerName,

[Parameter(Obligatorisk = $true,
ParameterSetName = "User")]
[sträng[]] $UserName,

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

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

elseif ($PSCmdlet.ParameterSetName -eq "User")
{
# hantera "Användare" parametergrupp
}

}

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

Position (namngiven)

Typ: int

Det här argumentet anger parameterns position 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 för 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 (namngivet)

Typ: bool; Standardvärde: $false

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

Ange $true om funktionen eller cmdleten kommer åt det fullständiga 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 indataobjektet 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 (namngiven)

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 $true anger att det gör det. Värdet $false anger att det inte gör det.

Ange $true om följande villkor är sanna: parametern kommer åt en egenskap för det 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 en parameter $ComputerName, och det piped-objektet har egenskapen ComputerName, tilldelas värdet för egenskapen ComputerName till parametern $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 vara bundna 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 deras deklarationsordning, och väljer det första alias som en egenskap finns för.

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

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

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

process { ... }
}

Hämta-Datum | Bearbeta-Datum

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 $true anger att det gör det. Värdet $false anger att det inte gör det.

I följande exempel visas en parameter $Others som accepterar alla återstående argument för indataobjektet som skickas till funktionstestet:

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

Test 10 20 # $Andra har längd 0
Test 10 20 30 40 # $Others har längd 2, värde 30,40

En implementering kan även definiera andra attribut.

Följande attribut tillhandahålls också:

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

12.3.8 PSDefaultValue-attributet

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

parameternamn Syfte
Hjälp (namn)

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 cmdleten [Get-Help](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 skriptparameter för att ge ytterligare information om parametern. Attributet används på ett implementeringsdefinierat sätt.

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
Minlängd (position 0)

Typ: int

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

Maxlängd (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ärdelista vara av valfri längd.

Överväg funktionsanropet Test som har följande paramblock och som visas nedan:

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 minimi- och maxlängden för parameterns argument, som måste ha typsträng. Följande argument används för att definiera parameterns egenskaper:

parameternamn Syfte
Minlängd (position 0)

Typ: int

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

Maxlängd (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 funktionsanropet Test som har följande paramblock och som visas nedan:

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 inte kan $null eller vara en samling som innehåller ett nullvärdeselement.

Överväg ett funktionsanrop Test som har följande parameterblock och som anropas som `visat`.

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ärderat eller tomt strängelement.

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

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 för att matcha 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 (med namnet)

Typ: Vanlig -Expression-Option

Se [§4.2.6.4][§4.2.6.4] för de tillåtna värdena.

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

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

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

Det här attributet används i en skriptparameter eller variabel för att ange lägsta och högsta värden 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 intervallbegränsning.

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

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 paramblock 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 paramblock och som anropas enligt följande:

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 verifiera parameterns argument.

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

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

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

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ättning av giltiga värden.

IgnoreCase (namngiven)

Typ: bool; Standardvärde: $true

Anger om skiftläge 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 paramblock och som anropas enligt följande:

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