Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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)] ) 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)] 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)] ) [Parameter(Verplicht = $true; [Parameter(Verplicht = $true; if ($PSCmdlet.ParameterSetName -eq "Computer") elseif ($PSCmdlet.ParameterSetName -eq "User") Test -ComputerName "Mars","Venus" -SharedParam 10 |
| 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)] |
| 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)] ) 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)] ) 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 [Parameter(ValueFromPipelineByPropertyName=$true)] [Parameter(ValueFromPipelineByPropertyName=$true)] proces { ... } |
| 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, Test 10 20 # $Others heeft lengte 0 |
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