12. Kenmerken

Een kenmerkobject koppelt vooraf gedefinieerde systeemgegevens aan een doelelement. Dit kan een parameter of parameter (8.10) zijn. Elk kenmerkobject heeft een kenmerktype.

Informatie die door een kenmerk wordt verstrekt, wordt ook wel metagegevens genoemd. Metagegevens kunnen worden onderzocht door de opdracht of de uitvoeringsomgeving om te bepalen hoe de opdracht gegevens verwerkt of vóór run time door externe hulpprogramma's om te bepalen hoe de opdracht zelf wordt verwerkt of onderhouden.

Er kunnen meerdere kenmerken worden toegepast op hetzelfde doelelement.

12.1 Kenmerkspecificatie

Tip

De ~opt~ notatie in de syntaxisdefinities geeft aan dat de lexicale entiteit optioneel is in de syntaxis.

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

Een kenmerk bestaat uit een kenmerknaam en een optionele lijst met positionele en benoemde argumenten. De positionele argumenten (indien van toepassing) voorafgaan aan de benoemde argumenten. Een benoemd argument bestaat uit een eenvoudige naam, eventueel gevolgd door een gelijkteken en gevolgd door een expressie. Als de expressie wordt weggelaten, wordt ervan uitgegaan dat de $true waarde wordt gebruikt.

De kenmerknaam is een gereserveerd kenmerktype (12.3) of een door de implementatie gedefinieerd kenmerktype.

12.2 Kenmerk instances

Een kenmerk-exemplaar is een object van een kenmerktype. Het exemplaar vertegenwoordigt een kenmerk tijdens run time.

Als u een object van een bepaald kenmerktype A wilt maken, gebruikt u de notatie A(). Een kenmerk wordt gedeclareerd door het exemplaar in tesluiten in [], zoals in [A()]. Sommige kenmerktypen hebben positionele en benoemde parameters (8.14), net als functies en cmdlets. Bijvoorbeeld:

[A(10,IgnoreCase=$true)]

toont een exemplaar van type A dat wordt gemaakt met behulp van een positionele parameter waarvan de argumentwaarde 10 is en een benoemde parameter, IgnoreCase, waarvan de argumentwaarde is $true.

12.3 Gereserveerde kenmerken

De kenmerken die in de volgende secties worden beschreven, kunnen worden gebruikt om het gedrag van PowerShell-functies, filters, scripts en cmdlets te verbeteren of te wijzigen.

12.3.1 Het kenmerk Alias

Dit kenmerk wordt gebruikt in een scriptparameter om een alternatieve naam voor een parameter op te geven. Een parameter kan meerdere aliassen hebben en elke aliasnaam moet uniek zijn binnen een parameterlijst. Een mogelijke toepassing is om verschillende namen voor een parameter in verschillende parametersets te hebben (zie ParameterSetName).

Het kenmerkargument heeft het type tekenreeks[].

Overweeg een functie-aanroep Test1 met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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

Overweeg een functie-aanroep Test2 met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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) wordt toegevoegd aan het object dat een nieuwe NoteProperty van het type string, psPath genaamd, retourneert.

12.3.2 Het kenmerk AllowEmptyCollection

Dit kenmerk wordt gebruikt in een scriptparameter om een lege verzameling toe te staan als het argument van een verplichte parameter.

Overweeg een functie-aanroep Test met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk AllowEmptyString

Dit kenmerk wordt gebruikt in een scriptparameter om een lege tekenreeks toe te staan als het argument van een verplichte parameter.

Overweeg een functie-aanroep Test met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk AllowNull

Dit kenmerk wordt gebruikt in een scriptparameter om een $null toe te staan als het argument van een verplichte parameter waarvoor geen impliciete conversie beschikbaar is.

Overweeg een functie-aanroep Test die het volgende paramblok heeft en dat wordt aangeroepen zoals wordt weergegeven:

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

Houd er rekening mee dat het tweede geval hierboven dit kenmerk niet nodig heeft; er is al een impliciete conversie van naar $null int.

12.3.5 Het kenmerk CmdletBinding

Dit kenmerk wordt gebruikt in de kenmerklijst van een param-block van een functie om aan te geven dat de functie vergelijkbaar is met een cmdlet. Met name kunnen functies toegang krijgen tot een aantal methoden en eigenschappen via de $PsCmdlet-variabele met behulp van begin-, proces- en eind benoemde blokken (8.10.7).

Als dit kenmerk aanwezig is, mislukken positionele argumenten die geen overeenkomende positionele parameters hebben, ervoor dat de parameterbinding mislukt en $args niet is gedefinieerd. (Zonder dit kenmerk $args niet-overeenkomende positionele argumentwaarden aan.)

De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
OndersteuntShouldProcess (benoemd)

Type: bool; Standaardwaarde: $false

Hiermee geeft u op of de functie aanroepen naar de methode ShouldProcess ondersteunt, die wordt gebruikt om de gebruiker om feedback te vragen voordat de functie een wijziging aan het systeem aanroept. Een waarde van $true geeft aan dat dit het doet. De waarde $false geeft aan dat dit niet het resultaat is.

ConfirmImpact (met de naam)

Type: tekenreeks; Standaardwaarde: 'Gemiddeld'

Hiermee geeft u het impactniveau van de uitgevoerde actie op. De aanroep van de methode ShouldProcess geeft alleen een bevestigingsprompt weer wanneer het argument ConfirmImpact groter is dan of gelijk is aan de waarde van de $ConfirmPreference voorkeursvariabele.

De mogelijke waarden van dit argument zijn:

Geen: alle aanvragen voor bevestiging onderdrukken.

Laag: De uitgevoerde actie heeft een laag risico op gegevensverlies.

Gemiddeld: De uitgevoerde actie heeft een gemiddeld risico op gegevensverlies.

Hoog: De uitgevoerde actie heeft een hoog risico op gegevensverlies.

De waarde van $ConfirmPreference kan zo worden ingesteld dat alleen cmdlets met een gelijk of hoger impactniveau bevestiging kunnen aanvragen voordat ze hun bewerking uitvoeren. Als de $ConfirmPreference bijvoorbeeld is ingesteld op Gemiddeld, kunnen cmdlets met een gemiddeld of hoog impactniveau om bevestiging vragen. Aanvragen van cmdlets met een laag impactniveau worden onderdrukt.

DefaultParameterSetName (benoemd)

Type: tekenreeks; Standaardwaarde: '__AllParameterSets'

Hiermee geeft u de parameterset op die moet worden gebruikt als dat niet kan worden bepaald op basis van de argumenten. Zie het benoemde argument ParameterSetName in de kenmerkparameter ([12.3.7][#12.3.7]).

PositionalBinding (benoemd)

Type: bool; Standaardwaarde: $true

Hiermee geeft u op of positionele binding wordt ondersteund of niet. De waarde van dit argument wordt genegeerd als parameters niet-standaardwaarden opgeven voor het benoemde argument Position of het benoemde argument ParameterSetName in de kenmerkparameter ([12.3.7][12.3.7]). Als het argument anders wordt $false zijn er geen parameters positioneel, anders krijgen parameters een positie toegewezen op basis van de volgorde waar de parameters zijn opgegeven.

Hier is een voorbeeld van het framework voor het gebruik van dit kenmerk:

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

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

12.3.6 Het kenmerk OutputType

Dit kenmerk wordt gebruikt in de kenmerklijst van param-block om de geretourneerde typen op te geven. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
Type (positie 0)

Type: tekenreeks[] of matrix van het type letterlijke gegevens

Een lijst met de typen van de waarden die worden geretourneerd.

ParameterSetName (met de naam)

Type: tekenreeks[]

Hiermee geeft u de parametersets op die de typen retourneren die worden aangegeven door de bijbehorende elementen van de parameter Type.

Hier zijn enkele voorbeelden van het gebruik van dit kenmerk:

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

12.3.7 Het kenmerk Parameter

Dit kenmerk wordt gebruikt in een script-parameter. De volgende benoemde argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameter Doel
HelpMessage (met de naam)

Type: tekenreeks

Dit argument geeft een bericht aan dat bedoeld is om een korte beschrijving van de parameter te bevatten. Dit bericht wordt op een door de implementatie gedefinieerde manier gebruikt wanneer de functie of cmdlet wordt uitgevoerd, maar een verplichte parameter met een HelpMessage geen bijbehorend argument heeft.

In het volgende voorbeeld ziet u een parameterdeclaratie die een beschrijving van de parameter bevat.

param ( [Parameter(Mandatory = $true,
HelpMessage = "Een matrix met computernamen.")]
[tekenreeks[]] $ComputerName )

Windows PowerShell: als er geen vereiste parameter is opgegeven, wordt de gebruiker door de runtime om een parameterwaarde gevraagd. Het promptdialoogvenster bevat de tekst HelpMessage.

Verplicht (benoemd)

Type: bool; Standaardwaarde: $false

Dit argument geeft aan of de parameter vereist is binnen de opgegeven parameterset (zie parameterSetName argument hieronder). De waarde $true geeft aan dat dit het is. De waarde $false geeft aan dat dit niet zo is.

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

Windows PowerShell: als er geen vereiste parameter is opgegeven, wordt de gebruiker door de runtime om een parameterwaarde gevraagd. Het promptdialoogvenster bevat de HelpMessage-tekst, indien van u die bevat.

ParameterSetName (benoemd)

Type: tekenreeks; Standaardwaarde: '__AllParameterSets'

Het is mogelijk om één functie of cmdlet te schrijven die verschillende acties voor verschillende scenario's kan uitvoeren. Dit wordt mogelijk gemaakt door verschillende groepen parameters weer te geven, afhankelijk van de actie die moet worden ondernomen. Dergelijke parametergroeperingen worden parametersets genoemd.

Het argument ParameterSetName geeft de parameterset aan waar een parameter bij hoort. Dit gedrag betekent dat elke parameterset één unieke parameter moet hebben die geen lid is van een andere parameterset.

Voor parameters die deel uitmaken van meerdere parametersets, voegt u een parameterkenmerk toe voor elke parameterset. Hierdoor kan de parameter voor elke parameterset anders worden gedefinieerd.

Een parameterset die meerdere positionele parameters bevat, moet unieke posities voor elke parameter definiëren. Geen twee positionele parameters kunnen dezelfde positie opgeven.

Als er geen parameterset is opgegeven voor een parameter, behoort de parameter tot alle parametersets.

Wanneer er meerdere parametersets zijn gedefinieerd, wordt het benoemde argument DefaultParameterSetName van het kenmerk CmdletBinding ([*12.3.5][*12.3.5]) gebruikt om de standaardparameterset op te geven. De runtime maakt gebruik van de standaardparameterset als deze niet kan bepalen welke parameterset moet worden gebruikt op basis van de informatie die wordt geleverd door de opdracht, of als er geen standaardparameterset is opgegeven.

In het volgende voorbeeld ziet u een functieTest met een parameterdeclaratie van twee parameters die deel uitmaken van twee verschillende parametersets en een derde parameter die bij beide sets hoort:

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

[Parameter(Verplicht = $true,
ParameterSetName = "User")]
[tekenreeks[]] $UserName,

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

if ($PsCmdlet.ParameterSetName -eq "Computer")
{
# handle "Computer" parameterset
}

elseif ($PsCmdlet.ParameterSetName -eq "User")
{
# de parameterset 'Gebruiker' verwerken
}

}

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

Positie (benoemd)

Type: int

Met dit argument wordt de positie van de parameter in de argumentenlijst opgegeven. Als dit argument niet is opgegeven, moet de parameternaam of de alias expliciet worden opgegeven wanneer de parameter is ingesteld. Als geen van de parameters van een functie posities heeft, worden posities toegewezen aan elke parameter op basis van de volgorde waarin ze worden ontvangen.

In het volgende voorbeeld ziet u de declaratie van een parameter waarvan de waarde moet worden opgegeven als het eerste argument wanneer de functie wordt aangeroepen.

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

ValueFromPipeline (benoemd)

Type: bool; Standaardwaarde: $false

Dit argument geeft aan of de parameter invoer van een pijplijnobject accepteert. De waarde $true geeft aan dat dit het doet. De waarde $false geeft aan dat dit niet het resultaat is.

Geef $true of de functie of cmdlet toegang heeft tot het volledige object, niet alleen een eigenschap van het object.

Slechts één parameter in een parameterset kan ValueFromPipeline declaren als $true.

In het volgende voorbeeld ziet u de parameterdeclaratie van een verplichte parameter, $ComputerName, die het invoerobject accepteert dat vanuit de pijplijn aan de functie wordt doorgegeven.

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

Voor een voorbeeld van het gebruik van deze parameter in combinatie met de Alias kenmerk zie [12.3.1][12.3.1].

ValueFromPipelineByPropertyName (benoemd)

Type: bool; Standaardwaarde: $false

Dit argument geeft aan of de parameter de waarde opgeeft uit een eigenschap van een pijplijnobject met dezelfde naam of dezelfde alias als deze parameter. De waarde $true geeft aan dat dit het doet. De waarde $false geeft aan dat dit niet het resultaat is.

Geef $true als aan de volgende voorwaarden wordt voldaan: de parameter heeft toegang tot een eigenschap van het piped-object en de eigenschap heeft dezelfde naam als de parameter, of de eigenschap heeft dezelfde alias als de parameter.

Een parameter waarin ValueFromPipelineByPropertyName is ingesteld op $true hoeft geen parameter in dezelfde set te hebben als ValueFromPipeline is ingesteld op $true.

Als een functie een parameter $ComputerName heeft en het object piped een eigenschap ComputerName heeft, wordt de waarde van de eigenschap ComputerName toegewezen aan de parameter $ComputerName van de functie:

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

Meerdere parameters in een parameterset kunnen valueFromPipelineByPropertyName definiëren als $true. Hoewel één invoerobject niet kan worden gebonden aan meerdere parameters, kunnen verschillende eigenschappen in dat invoerobject worden gebonden aan verschillende parameters.

Wanneer een parameter wordt gebonden aan een eigenschap van een invoerobject, zoekt de runtime-omgeving eerst naar een eigenschap met dezelfde naam als de parameter . Als een dergelijke eigenschap niet bestaat, zoekt de runtime-omgeving naar aliassen voor die parameter, in de volgorde van de declaratie, waarbij de eerste alias wordt gebruikt waarvoor een eigenschap bestaat.

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

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

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

process { ... }
}

Get-Date | Process-Date

ValueFromRemainingArguments (benoemd)

Type: bool; Standaardwaarde: $false

Dit argument geeft aan of de parameter alle resterende argumenten accepteert die niet zijn gebonden aan de parameters van de functie. De waarde $true geeft aan dat dit het doet. De waarde $false geeft aan dat dit niet het resultaat is.

In het volgende voorbeeld ziet u een parameter $others die alle resterende argumenten accepteert van het invoerobject dat wordt doorgegeven aan de functie Test:

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

Test 10 20 # $others lengte 0 heeft
Test 10 20 30 40 # $others lengte 2, waarde 30,40

Een implementatie kan ook andere kenmerken definiëren.

De volgende kenmerken worden ook opgegeven:

  • HelpMessageBaseName: hiermee geeft u de locatie op waar resource-id's zich bevinden. Met deze parameter kan bijvoorbeeld een resource-assembly worden opgegeven die Help-berichten bevat die moeten worden gelokaliseerd.
  • HelpMessageResourceId: hiermee geeft u de resource-id voor een Help-bericht op.

12.3.8 Het kenmerk PSDefaultValue

Dit kenmerk wordt gebruikt in een scriptparameter om aanvullende informatie over de parameter op te geven. Het kenmerk wordt gebruikt op een door de implementatie gedefinieerde manier. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
Help (met de naam)

Type: tekenreeks

Dit argument geeft een bericht aan dat is bedoeld om een korte beschrijving van de standaardwaarde van een parameter te bevatten. Dit bericht wordt op een door de implementatie gedefinieerde manier gebruikt.

Windows PowerShell: Het bericht wordt gebruikt als onderdeel van de beschrijving van de parameter voor het Help-onderwerp dat wordt weergegeven door de cmdlet [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help).

Waarde (met de naam)

Type: object

Met dit argument geeft u een waarde op die is bedoeld als de standaardwaarde van een parameter. De waarde wordt op een door de implementatie gedefinieerde manier gebruikt.

Windows PowerShell: De waarde wordt gebruikt als onderdeel van de beschrijving van de parameter voor het [Help-onderwerp](xref:Microsoft.PowerShell.Core.Get-Help) dat wordt weergegeven door de Get-Helpcmdlet wanneer de eigenschap Help niet is opgegeven.

12.3.9 Het kenmerk SupportsWildcards

Dit kenmerk wordt gebruikt in een scriptparameter om aanvullende informatie over de parameter op te geven. Het kenmerk wordt gebruikt op een door de implementatie gedefinieerde manier.

Dit kenmerk wordt gebruikt als onderdeel van de beschrijving van de parameter voor het Help-onderwerp dat wordt weergegeven door de cmdlet Get-Help .

12.3.10 Het kenmerk ValidateCount

Dit kenmerk wordt gebruikt in een scriptparameter om het minimale en maximale aantal argumentwaarden op te geven dat de parameter kan accepteren. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
MinLength (positie 0)

Type: int

Met dit argument geeft u het minimale aantal toegestane argumentwaarden op.

MaxLength (positie 1)

Type: int

Met dit argument geeft u het maximum aantal toegestane argumentwaarden op.

Als dit kenmerk niet wordt gebruikt, kan de bijbehorende lijst met argumentwaarden van de parameter elke lengte hebben.

Overweeg een functie-aanroep Test die het volgende paramblok heeft en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk ValidateLength

Dit kenmerk wordt gebruikt in een scriptparameter of variabele om de minimale en maximale lengte van het argument van de parameter op te geven, die een tekenreeks van het type moeten hebben. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
MinLength (positie 0)

Type: int

Met dit argument geeft u het minimale aantal tekens op dat is toegestaan.

MaxLength (positie 1)

Type: int

Met dit argument geeft u het maximum aantal tekens op dat is toegestaan.

Als dit kenmerk niet wordt gebruikt, kan het bijbehorende argument van de parameter elke lengte hebben.

Overweeg een functie-aanroep Test die het volgende paramblok heeft en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk ValidateNotNull

Dit kenmerk wordt gebruikt in een scriptparameter of variabele om op te geven dat het argument van de parameter $null geen verzameling mag zijn of zijn die een null-waarde-element bevat.

Overweeg een functie-aanroep Test met het volgende param-blok en dat wordt aangeroepen als 'weergegeven:

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 Het kenmerk ValidateNotNullOrEmpty

Dit kenmerk wordt gebruikt in een scriptparameter of variabele om op te geven dat het argument als de parameter niet $null, een lege tekenreeks of een lege matrix mag zijn, of een verzameling met een $null-waarde of een leeg tekenreekselement kan zijn.

Overweeg een functie-aanroep Test met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk ValidatePattern

Dit kenmerk wordt gebruikt in een scriptparameter of variabele om een reguliere expressie op te geven die overeenkomt met het patroon van het argument van de parameter. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
RegexString (positie 0)

Type: String

Een reguliere expressie die wordt gebruikt om het argument van de parameter te valideren

Opties (met de naam)

Type: Regular-Expression-Option

Zie [4.2.6.4][#4.2.6.4] voor de toegestane waarden.

Als het argument een verzameling is, moet elk element in de verzameling overeenkomen met het patroon.

Overweeg een functie-aanroep Test met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk ValidateRange

Dit kenmerk wordt gebruikt in een scriptparameter of variabele om de minimum- en maximumwaarden van het argument van de parameter op te geven. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
MinRange (positie 0)

Type: object

Met dit argument geeft u de minimaal toegestane waarde op.

MaxRange (positie 1)

Type: object

Met dit argument geeft u de maximaal toegestane waarde op.

Als dit kenmerk ontbreekt, is er geen bereikbeperking.

Overweeg een functie-aanroep Test1 met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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

Overweeg een functie-aanroep Test2 met het volgende paramblok en aanroepen:

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

Overweeg een functie-aanroep Test3 met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk ValidateScript

Dit kenmerk wordt gebruikt in een scriptparameter of variabele om een script op te geven dat moet worden gebruikt om het argument van de parameter te valideren.

Het argument op positie 1 is een script-block-expression.

Overweeg een functie-aanroep Test met het volgende param-blok en dat wordt aangeroepen zoals wordt weergegeven:

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 Het kenmerk ValidateSet

Dit kenmerk wordt gebruikt in een scriptparameter of variabele om een set geldige waarden op te geven voor het argument van de parameter. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

Parameternaam Doel
ValidValues (positie 0)

Type: tekenreeks[]

De set geldige waarden.

IgnoreCase (benoemd)

Type: bool; Standaardwaarde: $true

Hiermee geeft u op of case moet worden genegeerd voor parameters van het type tekenreeks.

Als de parameter een matrixtype heeft, moet elk element van de bijbehorende argument array overeenkomen met een element van de waardeset.

Overweeg een functie-aanroep Test met het volgende param-blok en dat wordt aangeroepen zoals weergegeven:

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