Delen via


12. Kenmerken

Redactionele notitie

Belangrijk

De Windows PowerShell Language Specification 3.0 is gepubliceerd in december 2012 en is gebaseerd op Windows PowerShell 3.0. Deze specificatie geeft niet de huidige status van PowerShell weer. Er is geen plan om deze documentatie bij te werken om de huidige status weer te geven. Deze documentatie wordt hier gepresenteerd voor historische naslaginformatie.

Het specificatiedocument is beschikbaar als een Microsoft Word-document in het Microsoft Downloadcentrum op: https://www.microsoft.com/download/details.aspx?id=36389 Dat Word-document hier is geconverteerd voor presentatie in Microsoft Learn. Tijdens de conversie zijn enkele redactionele wijzigingen aangebracht om opmaak voor het Docs-platform mogelijk te maken. Sommige typfouten en kleine fouten zijn gecorrigeerd.

Een kenmerk object koppelt vooraf gedefinieerde systeeminformatie aan een doelelement, dat een paramblok of een parameter kan zijn (§8.10). Elk kenmerkobject heeft een kenmerktype.

Informatie van een kenmerk wordt ook wel metagegevensgenoemd. Metagegevens kunnen worden onderzocht door de opdracht of de uitvoeringsomgeving om te bepalen hoe de opdracht gegevens verwerkt of vóór runtime 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

Fooi

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 aanwezig) worden voorafgegaan door 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 uitgegaan van de waarde $true.

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

12.2 Attribuutinstanties

Een kenmerkexemplaar is een object van een kenmerktype. De instantie vertegenwoordigt een attribuut tijdens uitvoeringstijd.

Als u een object van een kenmerktype Awilt maken, gebruikt u de notatie A(). Een kenmerk wordt gedeclareerd door een exemplaar binnen []te plaatsen, zoals in [A()]. Sommige kenmerktypen hebben positionele en benoemde parameters (§8.14), net als functies en cmdlets. Bijvoorbeeld

[A(10,IgnoreCase=$true)]

toont een instantie van het type A die wordt gemaakt met behulp van een positionele parameter waarvan de argumentwaarde 10 is, en een genaamde parameter, IgnoreCase, waarvan de argumentwaarde $trueis.

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 mogelijk gebruik is om verschillende namen voor een parameter in verschillende parametersets te hebben (zie ParameterSetName).

Het kenmerkargument heeft een typetekenreeks[].

Overweeg een functie-aanroep Test1 met het volgende parameterblok en die 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 parameterblok en die 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) voegt aan het object dat het retourneert een nieuwe NoteProperty- van het type stringtoe, genaamd PSPath-.

12.3.2 Het attribuut 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 parameterblok en die 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 parameterblok en die 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 $null toe te staan als het argument van een verplichte parameter waarvoor geen impliciete conversie beschikbaar is.

Overweeg een functie-aanroep Test met het volgende parameterblok en die 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 dit kenmerk niet nodig is in het tweede geval hierboven; er al een impliciete conversie is van $null naar int.

12.3.5 Het kenmerk CmdletBinding

Dit kenmerk wordt gebruikt in de kenmerklijst van paramblok- van een functie om aan te geven dat de functie vergelijkbaar is met een cmdlet. Het stelt functies in staat om toegang te krijgen tot een aantal methoden en eigenschappen via de $PSCmdlet variabele met behulp van begin-, proces- en eind benoemde blokken (§8.10.7).

Wanneer dit kenmerk aanwezig is, leiden positionele argumenten zonder overeenkomende positionele parameters ertoe dat parameterbinding mislukt en $args niet is gedefinieerd. (Zonder dit kenmerk $args eventuele niet-overeenkomende positionele argumentwaarden zou overnemen.)

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 aanbrengt in het systeem. Een waarde van $true geeft aan dat dit wel het geval is. Een waarde van $false geeft aan dat dit niet zo is.

ConfirmImpact (naamgegeven)

Type: tekenreeks; Standaardwaarde: 'Gemiddeld'

Hiermee geeft u het impactniveau van de uitgevoerde actie. 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 dat gegevens verloren gaan.

Gemiddeld: De uitgevoerde actie heeft een gemiddeld risico om gegevens te verliezen.

Hoog: De uitgevoerde actie heeft een hoog risico dat gegevens verloren gaan.

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

DefaultParameterSetName (benoemd)

Type: tekenreeks; Standaardwaarde: '__AllParameterSets'

Hiermee geeft u de parameter die moet worden gebruikt als die 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 $false is, dan zijn er geen parameters positioneel. Anders worden parameters een positie toegewezen op basis van de volgorde waarin de parameters zijn gespecificeerd.

Hier volgt 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-blok 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 letterlijke type

Een lijst met de typen waarden die worden geretourneerd.

ParameterSetName (gespecificeerd)

Type: tekenreeks[]

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

Hier volgen enkele voorbeelden van het gebruik van dit kenmerk:

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

12.3.7 Het parameterkenmerk

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

parameter doel
HelpMessage (benoemd)

Type: string (tekenreeks)

Dit argument geeft een bericht op 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 heeft geen bijbehorend argument.

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

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

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

Verplicht (benoemd)

Type: bool; Standaardwaarde: $false

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

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

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

ParameterSetName (gespecificeerd)

Type: tekenreeks; Standaardwaarde: '__AllParameterSets'

Het is mogelijk om één functie of cmdlet te schrijven die verschillende acties voor verschillende scenario's kan uitvoeren. Dit doet u door verschillende groepen parameters weer te geven, afhankelijk van de actie die u wilt ondernemen. Dergelijke parametergroepen worden parametersetsgenoemd.

Het argument ParameterSetName geeft de parameterset aan waartoe een parameter behoort. 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 definiëren voor elke parameter. Er kunnen geen twee positionele parameters dezelfde positie opgeven.

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

Wanneer 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 door de opdracht wordt verstrekt, of genereert een uitzondering 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 deel uitmaakt van beide sets:

param ( [Parameter(Verplicht = $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 de parameterset "Computer"
}

elseif ($PSCmdlet.ParameterSetName -eq "User")
{
#handle "User" parameter set
}

}

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

Positie (benoemd)

Type: int

Dit argument geeft de positie van de parameter in de lijst met argumenten aan. 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(Positie = 0)]
[tekenreeks[]] $ComputerName )

ValueFromPipeline (benoemd)

Type: bool; Standaardwaarde: $false

Dit argument geeft aan of de parameter invoer van een pijplijnobject accepteert. Een waarde van $true geeft aan dat dit wel het geval is. Een waarde van $false geeft aan dat dit niet het geval is.

Geef $true op als 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 declareren als $true.

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

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

Zie [§12.3.1][§12.3.1] [§12.3.1] voor een voorbeeld van het gebruik van deze parameter in combinatie met het aliaskenmerk.

ValueFromPipelineByPropertyName (benoemd)

Type: bool; Standaardwaarde: $false

Dit argument geeft aan of de parameter de waarde van een eigenschap van een pijplijnobject met dezelfde naam of dezelfde alias als deze parameter gebruikt. Een waarde van $true geeft aan dat dit wel het geval is. Een waarde van $false geeft aan dat dit niet het geval is.

Geef $true op 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 waarvoor ValueFromPipelineByPropertyName is ingesteld op $true, hoeft geen parameter in dezelfde set te hebben waarvoor ValueFromPipeline is ingesteld op $true.

Als een functie een parameter $ComputerName heeft en het via de pipeline doorgegeven object een ComputerName-eigenschap heeft, zal de waarde van de ComputerName-eigenschap worden toegewezen aan de parameter $ComputerName van de functie.

param ( [Parameter(Verplicht = $true)] )
ValueFromPipelineByPropertyName = $true)
[tekenreeks[]] $ComputerName )

Meerdere parameters in een parameterset kunnen de 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.

Bij het binden van een parameter met 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 declaratievolgorde, waarbij de eerste dergelijke alias wordt gekozen waarvoor een eigenschap bestaat.

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

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

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

proces { ... }
}

Haal-Datum | Verwerk-Datum

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. Een waarde van $true geeft aan dat dit wel het geval is. Een waarde van $false geeft aan dat dit niet het geval is.

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

param ( [Parameter(Verplicht = $true)][int] $p1,
[Parameter(Verplicht = $true)][int] $p2,
[Parameter(ValueFromRemainingArguments = $true)]
[tekenreeks[]] $Others )

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

Een implementatie kan ook andere kenmerken definiëren.

De volgende kenmerken zijn ook beschikbaar:

  • HelpMessageBaseName: hiermee geeft u de locatie op waar de resource-id's zich bevinden. Met deze parameter kunt u bijvoorbeeld een resourceassembly opgeven 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 op een implementatiespecifieke manier gebruikt. De volgende argumenten worden gebruikt om de kenmerken van de parameter te definiëren:

parameternaam doel
Help (benoemd)

Type: string (tekenreeks)

Met dit argument wordt een bericht opgegeven dat bedoeld is voor een korte beschrijving van de standaardwaarde van een parameter. 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 (benoemd)

Type: object

Dit argument geeft een waarde op die bedoeld is 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 dat wordt weergegeven door de [Get-Help](xref:Microsoft.PowerShell.Core.Get-Help)-cmdlet wanneer de Help-eigenschap 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 op een implementatiespecifieke manier gebruikt.

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 minimum- en maximum aantal argumentwaarden op te geven dat door de parameter kan worden geaccepteerd. 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 minimum aantal toegestane argumentwaarden op.

MaxLength (positie 1)

Type: int

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

Als dit kenmerk ontbreekt, kan de overeenkomende lijst met argumentwaarden van de parameter elke lengte hebben.

Overweeg een functie-aanroep Test met het volgende parameterblok en die 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 minimum- en maximumlengte van het argument van de parameter op te geven, die een typetekenreeks moet 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 minimum aantal toegestane tekens op.

MaxLength (positie 1)

Type: int

Dit argument geeft het maximum aantal toegestane tekens op.

Als dit kenmerk ontbreekt, kan het bijbehorende argument van de parameter elke lengte hebben.

Overweeg een functie-aanroep Test met het volgende parameterblok en die 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 niet kan worden $null of een verzameling met een element met null-waarden.

Overweeg een functie-aanroep Test met de volgende parameterblok die wordt aangeroepen zoals getoond:

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 aan te geven dat het argument, indien de parameter, niet $null mag zijn, niet een lege tekenreeks, niet een lege array of een verzameling mag bevatten met een $null-waarde of een leeg tekstreeks element.

Overweeg een functie-aanroep Test met het volgende parameterblok en die 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: Tekenreeks

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

Opties (benoemd)

Type: Reguliere-Expressie-Optie

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 parameterblok en die 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 minimumwaarde op die is toegestaan.

MaxRange (positie 1)

Type: object

Met dit argument geeft u de toegestane maximumwaarde op.

Als dit kenmerk ontbreekt, is er geen bereikbeperking.

Overweeg een functie-aanroep Test1 met het volgende parameterblok en die 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 parameterblok 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 parameterblok en die 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 in positie 1 is een scriptblokexpressie.

Overweeg een functie-aanroep Test met het volgende parameterblok en die 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 van geldige waarden.

IgnoreCase (benoemd)

Type: bool; Standaardwaarde: $true

Hiermee geeft u aan of de lettergrootte moet worden genegeerd voor parameters van het type 'string'.

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

Overweeg een functie-aanroep Test met het volgende parameterblok en die wordt aangeroepen zoals wordt 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