• 10/27/2020
  • 20 minutes to read
    • S
    • s
    • s
    • c
    • g

Short description

Explains how to add parameters to advanced functions.,

Lang beskrivelse

kan Du legge til parametere for avanserte funksjoner som du skriver, og useparameter attributter og argumenter for å begrense parameterverdier som functionusers sende med parameteren.

De parametere som du kan legge til funksjonen er tilgjengelig for brukere i additionto felles parametere som PowerShell legger automatisk til alle cmdlets andadvanced funksjoner. For mer informasjon om PowerShell commonparameters, se about_CommonParameters.

i Begynnelsen PowerShell-3.,0, kan du bruke splatting med @Args for å representthe parametre i en kommando. Splatting er gyldig på enkle og advancedfunctions. For mer informasjon, se about_Functions andabout_Splatting.

Skriv konvertering av parameter-verdier

Når du oppgir strenger som argumenter til parametere som forventer en differenttype, PowerShell implisitt konverterer strenger til parameteren måltype.Avanserte funksjoner utføre kultur-invariant analysering av parameterverdier.

i motsetning, en kultur-sensitive konverteringen er utført i løpet parameterbinding for samlet cmdlets.,

I dette eksempelet skal vi lage en cmdlet og et script funksjon som tar en – parameteren. Dagens kultur er endret for å bruke tysk innstillinger.En tysk-formatert datoen er gått til parameter.

Dienstag, 19. Juni 2018 00:00:00

Som vist ovenfor, cmdletene bruker kultur-sensitive parsing for å konvertere strengen.

Avanserte funksjoner bruker kultur-invariant parsing, som resulterer i thefollowing feil.

Statiske parametre

Statiske parametre er parametere som alltid er tilgjengelige i funksjon.,De fleste parametre i PowerShell cmdlets og skript er statiske parametre.

følgende eksempel viser erklæringen av en Datamaskinnavn parameterthat har følgende egenskaper:

  • Det er obligatorisk (obligatorisk).
  • Det tar input fra rørledningen.
  • Det tar en array med strenger som input.
Param( ] $ComputerName)

Attributter av parametere

Dette avsnittet beskriver attributtene som du kan legge til funksjon parametere.

Alle attributter er valgfritt., Imidlertid, hvis du utelater CmdletBindingattribute, for så å bli anerkjent som en avansert funksjon, funksjonen mustinclude Parameteren attributtet.

Du kan legge til ett eller flere attributter i hver parameter erklæring. Det’sno grense for antall attributter som du kan legge til et parameterdeclaration.

– Parameteren attributt

Parameteren attributtet brukes til å erklære attributter av functionparameters.

Parameteren egenskapen er valgfri, og du kan utelate det hvis ingen av theparameters av din funksjonene må attributter., Men, for å bli anerkjent som anadvanced funksjon, snarere enn en enkel funksjon, en funksjon må ha eitherthe CmdletBinding attributt eller Parameteren attributt, eller begge deler.

Parameteren attributtet har argumenter som definerer egenskapene ofthe parameter, for eksempel om parameteren er obligatorisk eller valgfri.

du Bruke følgende syntaks for å forkynne Parameter-attributtet, et argument,og et argument verdi. Parentesene som omslutter argument og dens valuemust følge Parameter uten mellomrom.,

Param( $ParameterName)

Bruk komma for å skille argumenter i parentes. Bruk followingsyntax å erklære to argumenter for Parameteren-attributtet.

Param( )

Den boolske argument typer Parameteren attributt standard Falsewhen utelatt fra Parameter-attributtet. Angi argumentet verdien til$true eller bare liste argumentet av navnet. For eksempel, den followingParameter attributter er tilsvarende.,

Hvis du bruker Parameteren attributt uten argumenter, som et alternativ tousing den CmdletBinding-attributtet, parenteser som følge theattribute navnet er fortsatt nødvendig.

Param( $ParameterName)

Obligatorisk argumentet

Mandatory argumentet indikerer at parameteren er obligatorisk. Hvis thisargument er ikke angitt, parameteren er valgfri.

følgende eksempel erklærer Datamaskinnavn parameter. Den brukerMandatory argument for å gjøre parameteren er obligatorisk.,

Param( ] $ComputerName)

Posisjon argumentet

Position argumentet avgjør om parameteren navn er nødvendig whenthe parameteren brukes i en kommando. Når en parameter erklæringen omfatterPosition argumentet parameter navn, kan være utelatt, og PowerShellidentifies det ikke navngitt parameter verdi av sin posisjon, eller for, i listof ikke navngitt parameter verdier i kommandoen.,

Hvis Position argumentet ikke er angitt, parameter navn, eller en parametername alias eller forkortelse, må gå forut for parameteren verdi når theparameter er brukt i en kommando.

som standard, alle funksjonen parametere er stedsbestemt. PowerShell tildeler positionnumbers til parametre i den rekkefølgen de parameterne som er angitt i thefunction. For å deaktivere denne funksjonen, angir du verdien for PositionalBindingargument av CmdletBinding attributtet til $False., Positionargumentet har forrang over verdien av PositionalBinding argumentet ofthe CmdletBinding attributtet. For mer informasjon, se PositionalBindingi about_Functions_CmdletBindingAttribute.

verdi Position argumentet er angitt som et heltall. En positionvalue 0 representerer den første posisjonen i kommandoen, en posisjon valueof 1 representerer den andre posisjonen i kommando, og så videre.,

Hvis en funksjon har ikke stedsbestemt parametre, PowerShell tildeler stillinger toeach parameter basert på i hvilken rekkefølge de parameterne som er erklært.Men, som en av beste praksis, ikke stole på seg denne oppgaven. Når du wantparameters å være stedsbestemt, bruk Position argument.

følgende eksempel erklærer Datamaskinnavn parameter. Den brukerPosition argumentet med en verdi på 0. Som et resultat, når -ComputerName isomitted fra kommando, verdien må være den første eller eneste navnløse parametervalue i kommandoen.,

Param( ] $ComputerName)

ParameterSetName argumentet

ParameterSetName argumentet angir parameteren satt til som aparameter tilhører. Hvis ingen parametersettet er angitt, parameter tilhører toall parameteren angir definert av funksjon. Derfor, for å være unik, eachparameter sett må ha minst én parameter som ikke er medlem av noen otherparameter sett.

Merk

For en cmdlet-en eller-funksjon, det er en grense på 32 parametersett.,

følgende eksempel erklærer en Datamaskinnavn parameter i Computerparameter angi et Brukernavn parameter i User parametersett, og aSummary parameter i både parametersett.

Du kan angi bare en ParameterSetName verdi i hvert argument og bare enParameterSetName argument i hver Parameter-attributtet. For å indikere at aparameter vises i mer enn én parameter set, legge til flere Parameterattributes.,

følgende eksempel eksplisitt legger Oppsummering parameteren tilComputer og User parametersett. Oppsummering parameteren er valgfri inthe Computer parametersett og obligatorisk i User parametersett.

For mer informasjon om parameteren angir, kan du se Om parametersett.

ValueFromPipeline argumentet

ValueFromPipeline argumentet indikerer at parameteren aksepterer inputfrom en rørledning objekt., Angi dette argumentet hvis funksjonen aksepterer avhele objekt, ikke bare en egenskap ved objektet.

følgende eksempel erklærer en Datamaskinnavn parameter som er mandatoryand aksepterer et objekt som sendes til funksjonen fra rørledningen.

Param( ] $ComputerName)

ValueFromPipelineByPropertyName argumentet

ValueFromPipelineByPropertyName argumentet angir at parameteraccepts innspill fra en eiendom av en rørledning objekt. Objektet eiendom musthave samme navn eller alias som parameter.,

For eksempel, hvis funksjon har et Datamaskinnavn parameter, og pipedobject har et Datamaskinnavn eiendom, verdien av ComputerNameproperty er tildelt funksjonen er Datamaskinnavn parameter.

følgende eksempel erklærer en Datamaskinnavn parameter som er mandatoryand aksepterer inndata fra objektet er Datamaskinnavn eiendom som sendes til funksjonen gjennom rørledningen.,

Param( ] $ComputerName)

Merk

Et maskinskrevet parameter som aksepterer rørledning inngang (by Value) eller(by PropertyName) gjør bruk av delay-bind script blokker på theparameter.

forsinkelsen-bind script blokkere kjøres automatisk duringParameterBinding. Resultatet er bundet til parameter. Forsinkelse bindingdoes ikke fungerer for parameterne som er definert som type ScriptBlock ellerSystem.Object. Skriptet blokk er gått gjennom uten å bli brukt.

Du kan lese om forsinkelse-bind script blokker her about_Script_Blocks.md.,

ValueFromRemainingArguments argumentet

ValueFromRemainingArguments argumentet indikerer at parameteren acceptsall parameterens verdier i kommandoen som ikke er tilordnet til otherparameters av funksjon.

følgende eksempel erklærer en Verdi parameteren som er obligatorisk og aRemaining parameter som aksepterer alle de resterende parameterverdier thatare sendes til funksjonen.

Found 2 elements0: one1: two

Merk

Før PowerShell 6.2, den ValueFromRemainingArguments samling wasjoined som én enhet under indeks 0.,

HelpMessage argumentet

HelpMessage argumentet angir en streng som inneholder en kort prosjektbeskrivelse parameteren eller dets verdi. PowerShell viser denne meldingen i promptthat vises når en obligatorisk parameter verdi mangler fra en kommando. Thisargument har ingen effekt på valgfrie parametere.

følgende eksempel erklærer en obligatorisk Datamaskinnavn parameter og ahelp melding som forklarer den forventede parameter verdi.,

Hvis det er ingen annen kommentar-basert hjelp syntaxfor funksjonen (for eksempel .SYNOPSIS) så denne meldingen viser seg også iGet-Help utdata.

Param( ] $ComputerName)

Alias-attributt

Alias-attributtet etablerer et alternativt navn for parameter.Det er ingen grense for antall aliaser som du kan tilordne til en parameter.

følgende eksempel viser en parameter erklæring som legger til CN andMachineName aliaser til den obligatoriske Datamaskinnavn parameter.,

Param( ] $ComputerName)

SupportsWildcards attributt

SupportsWildcards attributtet brukes til å indikere at parameteraccepts jokertegn verdier. Følgende eksempel viser en parameter declarationfor en obligatorisk Banen parameter som støtter jokertegn verdier.

Param( ] $Path)

ved Hjelp av dette attributtet ikke automatisk aktivere jokertegn støtte. Den cmdletdeveloper må implementere kode for å håndtere jokertegn inngang. Den wildcardssupported kan variere i henhold til de underliggende API eller PowerShell leverandør. Mer informasjon, se about_Wildcards.,

– Parameteren og variable validering attributter

Validering attributter direkte PowerShell til å teste parameterverdier som userssubmit når de kaller avansert funksjon. Hvis parameter verdier mislykkes thetest, det genereres en feil, og funksjonen er ikke kalt. Parameteren validationis bare brukt til inndata er gitt og eventuelle andre verdier som standard valuesare ikke validert.

Du kan også bruke validering attributter for å begrense verdier thatusers kan angi for variabler., Når du bruker en skriver konverter sammen med avalidation attributtet type converter må være definert før attributtet.

 $number = 7

AllowNull validering attributt

AllowNull attributt gjør at verdien av en obligatorisk parameter for å være$null. Følgende eksempel erklærer en hashtable ComputerInfo parameterthat kan ha en null-verdi.

Param( $ComputerInfo)

Merk

AllowNull attributt fungerer ikke hvis den type converter er satt tostring som string type vil ikke akseptere en null-verdi., Du kan bruke theAllowEmptyString attributtet for dette scenariet.

AllowEmptyString validering attributt

AllowEmptyString attributt gjør at verdien av en obligatorisk parameter tobe en tom streng (""). Følgende eksempel erklærer en ComputerNameparameter som kan ha en tom streng verdi.

Param( $ComputerName)

AllowEmptyCollection validering attributt

AllowEmptyCollection attributt gjør at verdien av en mandatoryparameter å være en tom collection @()., Følgende eksempel erklærer aComputerName parameter som kan ha en tom samling verdi.

Param( ] $ComputerName)

ValidateCount validering attributt

ValidateCount attributtet angir minimum og maksimum antall ofparameter verdier som en parameter aksepterer. PowerShell genererer en feil hvis thenumber av parameterverdier i kommandoen som kaller funksjonen er outsidethat utvalg.

følgende parameter erklæringen skaper et Datamaskinnavn parameter thattakes ett til fem faste verdier.,

Param( ] $ComputerName)

ValidateLength validering attributt

ValidateLength attributtet angir minimum og maksimum antall ofcharacters i en parameter eller variabel verdi. PowerShell genererer en feil ifthe lengden av en verdi som er angitt for en parameter eller en variabel er utenfor therange.

I følgende eksempel, hver datamaskin navn må ha en til ti tegn.

Param( ] $ComputerName)

I følgende eksempel verdien av variabelen $number må være en minimumof ett tegn i lengde, og maksimalt ti tegn.,

$number = '01'

Merk

I dette eksempelet, verdien av 01 er pakket inn i et enkelt anførselstegn. TheValidateLength attributtet vil ikke akseptere et nummer uten å bli pakket inquotes.

ValidatePattern validering attributt

ValidatePattern attributtet angir et vanlig uttrykk som’scompared til parameter eller variabel verdi. PowerShell genererer en feil ifthe-verdien ikke matcher det regulære uttrykk.,

I det følgende eksemplet, parameterverdien må inneholde en fire-sifret tall,og hvert siffer må være et tall null til ni.

Param( ")] ] $ComputerName)

I følgende eksempel verdien av variabelen $number må være nøyaktig afire-sifret nummer, og hvert siffer må være et tall null til ni.

$")]$number = 1111

ValidateRange validering attributt

ValidateRange attributtet angir en numerisk område eller aValidateRangeKind enum-verdi for hver parameter eller variabel verdi.PowerShell genererer en feil hvis noen verdi er utenfor dette området.,

ValidateRangeKind enum gir følgende verdier:

  • Positive – Et tall som er større enn null.
  • Negative – Et tall mindre enn null.
  • NonPositive – Et tall mindre enn eller lik null.
  • Ikkenegative – Et tall som er større enn eller lik null.

I følgende eksempel verdien av Forsøk parameteren må bebetween null og ti.

Param( $Attempts)

I følgende eksempel verdien av variabelen $number må være betweenzero og ti.,

$number = 5

I følgende eksempel verdien av variabelen $number må være greaterthan null.

$number = 1

ValidateScript validering attributt

ValidateScript attributtet angir et skript som brukes til å validere aparameter eller variabel verdi. PowerShell rør verdien til skriptet, andgenerates en feil hvis scriptet returnerer $false eller hvis skriptet kaster anexception.,

Når du bruker ValidateScript attributt, verdien som blir validatedis tilordnet til $_ variabel. Du kan bruke $_ variabel for å se thevalue i skriptet.

I følgende eksempel verdien av EventDate parameteren må begreater enn eller lik dagens dato.

Param( $EventDate)

I følgende eksempel verdien av variabelen $date må være greaterthan eller lik gjeldende dato og klokkeslett.,

$date = (Get-Date)

Merk

Hvis du bruker ValidateScript, du kan ikke sende en $null verdi til theparameter. Når du passerer en null-verdi ValidateScript kan ikke validere theargument.

ValidateSet attributt

ValidateSet attributtet angir et sett med gyldige verdier for en parameteror variabel, og gjør det mulig tab for ferdigstillelse. PowerShell genererer en feil hvis aparameter eller variabel verdi ikke tilsvarer en verdi i settet. I followingexample, verdien av Detalj-parameteren kan kun være Lav, Gjennomsnittlig, orHigh.,

Param( ] $Detail)

I følgende eksempel verdien av variabelen $flavor må være eitherChocolate, Jordbær, eller Vanilje.

$flavor = "Strawberry"

validering skjer når den variabelen er tilordnet selv innenfor thescript. For eksempel, følgende resultater i en feil ved kjøring:

Param( $Message)$Message = "bye"

Dynamisk validateSet verdier

Du kan bruke en Klasse til å dynamisk generere verdier for ValidateSetat runtime., I følgende eksempel gyldige verdier for variabelen$Sound er generert via en Klasse som heter SoundNames som kontrollerer threefilesystem baner tilgjengelig for lyd filer:

klassen er så gjennomført som en dynamisk ValidateSet valueas følger:

Param( )] $Sound)

ValidateNotNull validering attributt

ValidateNotNull attributtet angir at parameterverdien kan ikke være$null. PowerShell genererer en feil hvis parameteren verdi $null.,

ValidateNotNull attributtet er utformet for å brukes når parameteren isoptional og typen er udefinert eller har en type converter som kan’timplicitly konvertere en null-verdi som objekt. Hvis du angir en skriver thatthat vil automatisk konvertere en null-verdi som en streng, null valueis konvertert til en tom streng, selv når du bruker ValidateNotNullattribute. For dette scenariet bruker ValidateNotNullOrEmpty

I følgende eksempel verdien av ID-parameteren kan ikke være $null.,

Param( $ID)

ValidateNotNullOrEmpty validering attributt

ValidateNotNullOrEmpty attributtet angir at parameteren valuecan ikke være $null, og kan ikke være en tom streng (""). PowerShell genererer anerror hvis parameteren brukes i en funksjon ringe, men verdien er $null, anempty strengen (""), eller en tom matrise @().,

Param( ] $UserName)

ValidateDrive validering attributt

ValidateDrive attributtet angir at parameterverdien mustrepresent banen, det er med henvisning til lov stasjoner bare. PowerShellgenerates en feil hvis parameteren verdi refererer til andre stasjoner enn theallowed. Eksistensen av banen, bortsett fra selve stasjonen, er ikke bekreftet.

Hvis du bruker relativ bane, den nåværende stasjonen må være i lov stasjon-listen.,

Param( $Path)

ValidateUserDrive validering attributt

ValidateUserDrive attributtet angir at parameterverdien mustrepresent banen, som henviser til User kjør. PowerShell genererer anerror hvis banen refererer til en annen stasjon. Validering attributt onlytests for eksistensen av stasjonen del av banen.

Hvis du bruker relativ bane, den nåværende stasjonen må være User.,

Test-UserDrivePath: Cannot validate argument on parameter 'Path'. The pathargument drive C does not belong to the set of approved drives: User.Supply a path argument with an approved drive.

Test-UserDrivePath -Path 'User:\A_folder_that_does_not_exist'
Test-UserDrivePath: Cannot validate argument on parameter 'Path'. Cannotfind drive. A drive with the name 'User' does not exist.

Du kan angi User kjør i Akkurat Nok Administration (JEA) sessionconfigurations. For dette eksempelet er vi opprette Brukeren: – stasjonen.

New-PSDrive -Name 'User' -PSProvider FileSystem -Root $env:HOMEPATH
True

ValidateTrustedData validering attributt

Dette attributtet ble lagt i PowerShell 6.1.1.

På denne tiden, attributtet brukes internt av PowerShell seg selv, og er notintended for ekstern bruk.,

Dynamiske parametre

Dynamiske parametre er parametere til en cmdlet, funksjon, eller skript som areavailable bare under visse betingelser.

For eksempel, flere leverandøren cmdlets har parametre som er tilgjengelige onlywhen cmdleten er brukt i leverandør-stasjonen, eller i en bestemt bane av theprovider stasjonen. For eksempel, Koding parameter er tilgjengelig påAdd-Content, Get-Content, og Set-Content cmdlets bare når det er brukt ina file system-stasjonen.,

Du kan også opprette en parameter som bare vises når en annen parameter isused i funksjon kommando eller når en annen parameter har en viss verdi.

Dynamiske parametre kan være nyttig, men bruker dem bare når det er nødvendig, becausethey kan være vanskelig for brukere å oppdage. Å finne en dynamisk parameter, theuser må være i leverandør-bane, bruk ArgumentList av parameterenGet-Command cmdlet, eller bruke Banen av parameteren Get-Help.

for Å lage en dynamisk parameter for en funksjon eller et skript, kan du bruke DynamicParamsøkeord.,

syntaksen er som følger:

DynamicParam {<statement-list>}

I uttalelsen listen, kan du bruke en If uttalelse for å angi betingelsene underwhich parameteren er tilgjengelig i funksjon.

for New-Object cmdlet for å skape aSystem.Management.Automatisering.RuntimeDefinedParameter objekt til representthe parameter og angi navnet.

Du kan bruke en New-Object kommando for å opprette aSystem.Management.Automatisering.,ParameterAttribute objekt til representattributes av parameter, for eksempel Obligatorisk, Posisjon, orValueFromPipeline eller dets parametersett.

følgende eksempel viser et eksempel på en funksjon med standard parametre namedName og Bane, og en valgfri dynamisk parameter som heter DP1. TheDP1 parameteren er i PSet1 parametersett og har en type Int32.,Den DP1 parameter er tilgjengelig i Get-Sample – funksjonen bare når thevalue av Banen parameter som starter med HKLM:, noe som indikerer at det beingused i HKEY_LOCAL_MACHINE register drive.

For mer informasjon, seeRuntimeDefinedParameter.

Slå parametere

Slå parametere er parametere med ingen parameter verdi. De er effectiveonly når de er brukt og har bare en effekt.

For eksempel, NoProfile parameter av powershell.exe-er en switchparameter.,

for Å lage en bryter parameter i en funksjon, må du angi Switch skriv i theparameter definisjon.

For eksempel slik:

Param(<ParameterName>)

Eller, du kan bruke en annen metode:

Param( $<ParameterName>)

Slå på parametere som er enkel å bruke og er foretrukket over Boolske variabler som har en mer vanskelig syntaks.

For eksempel, for å bruke en bryter parameter, brukeren typer parameteren i thecommand.

-IncludeAll

for Å bruke en Boolsk parameter, brukeren skriver inn parameter og en Boolsk verdi.,

-IncludeAll:$true

Når du oppretter bytte parametre, kan du velge parameter navn nøye. Bli surethat parameteren navn kommuniserer effekten av parameter til brukeren.Unngå tvetydige begreper, som Filter eller Maksimalt kan antyde avalue er nødvendig.

ArgumentCompleter attributt

ArgumentCompleter attributtet kan du legge til kategorien ferdigstillelse verdier toa parameter. En ArgumentCompleter attributtet må være definert foreach parameter som må tab for ferdigstillelse., Lik DynamicParameters, theavailable verdiene er beregnet ved kjøring når brukeren trykker Tabafter parameteren navn.

for Å legge til en ArgumentCompleter attributt, må du definere et skript blockthat bestemmer verdier. Skriptet blokk må ta followingparameters i den rekkefølgen som er angitt nedenfor. Parameteren navn ikke saken asthe verdier er gitt positionally.,

syntaksen er som følger:

ArgumentCompleter script blokk

skriptet blokkere parametere er satt til følgende verdier:

  • $commandName (Posisjon 0) – Denne parameteren er satt til navnet av thecommand som skriptet blokk er å gi tab for ferdigstillelse.
  • $parameterName (Posisjon 1) – Denne parameteren er satt til parameter whosevalue krever tab for ferdigstillelse.
  • $wordToComplete (Posisjon 2) – Denne parameteren er satt til verdi for brukeren hasprovided før de trykket Kategorien., Skriptet blokkere bør usethis verdi for å avgjøre kategorien ferdigstillelse verdier.
  • $commandAst (Posisjon 3) – Denne parameteren er satt til Abstrakt SyntaxTree (AST) for den gjeldende inngangen linje. For mer informasjon, seeAst Klasse.
  • $fakeBoundParameters (Posisjon 4) – Denne parameteren er satt til en hashtablecontaining $PSBoundParameters for cmdleten, før brukeren pressedTab. For mer informasjon, seeabout_Automatic_Variables.,

ArgumentCompleter script blokk må rulle verdiene med thepipeline, for eksempel ForEach-Object, Where-Object eller annen egnet metode.Returnerer en matrise med verdier fører til PowerShell til å behandle hele matrisen asone kategorien ferdigstillelse verdi.

følgende eksempel legger til kategorien ferdigstillelse til den Verdi som parameter. Hvis onlythe Verdien for parameteren er angitt, vil alle mulige verdier, eller argumenter, forValue vises. Når parameter er angitt, theValue parameteren vises kun mulige verdier for denne typen.,

I tillegg, -like operatør sikrer at hvis brukeren skriver inn followingcommand og bruker Tab-completion, bare Apple er returnert.

Test-ArgumentCompleter -Type Fruits -Value A

Se også:

about_Automatic_Variables

about_Functions

about_Functions_Advanced

about_Functions_Advanced_Methods

about_Functions_CmdletBindingAttribute

about_Functions_OutputTypeAttribute