Adam Automator

når du opretter Effektskalfunktioner, er validering af input til parametre vigtig. Parametervalidering giver dig mulighed for at begrænse, hvad der overføres til funktioner. I denne artikel vil du lære at fange problemer, før de bliver en med attributten Validatescript validation.

ved hjælp af parametervalidering sikrer du ikke kun, at der ikke opstår problemer, når funktionen kører, men fremmer også renere kode, da valideringslogikken ikke er placeret i funktionens krop.

der er flere avancerede parametervalideringsattributter tilgængelige. Men i denne artikel lærer du om en af de mest fleksible parametervalideringer, Validatescript Validering.

du kan se, hvordan det fungerer, og også se eksempler på, hvordan du bruger det.

Indholdsfortegnelse

Parameter Validering (en analogi)

Parameter Validering

jeg spiste frokost, og jeg havde pludselig lyst til at have en sodavand. Jeg gik til sodavandsmaskinen, trak en liter 100 regning ud af lommen og indsatte den til regningen slot. Maskinen spytter den straks ud.

jeg så bemærket, at lige lige over slot Det siger, at det kun accepterer kr20 og kr50 regninger. Jeg endte med ikke at have sodavand, fordi jeg kun havde den 100-regning med mig.

og hvordan forholder historien sig til validering af effektparameter? Lad os bryde det ned.

  • sodamaskinen fungerer som funktionen
  • regningen er parameteren
  • de 50 og 20 regninger er de gyldige parameterværdier
  • den 100 blev afvist, fordi det er den forkerte parameterværdi
  • som et resultat behandlede maskinen ikke min anmodning på grund af den forkerte input. Derfor ingen sodavand til mig. ….jeg var også tørstig!

soda machine-scenariet ovenfor er kun en analogi til at beskrive begrebet parametervalidering.

Logikstrøm for Parametervalidering

begrebet parametervalidering følger en grov arbejdsgang. Billedet nedenfor viser en oversigt over, hvordan parametervalidering fungerer.

validering af effektparameter
  1. funktionen udføres i Strømshell ved at kalde sit navn og give parameterværdierne
  2. Strømshell evaluerer de angivne værdier.
  3. hvis resultatet af valideringen er sandt, tillader Strømshell funktionen at fortsætte sin proces, inden den afsluttes.
  4. hvis resultatet af valideringen er falsk, vises en fejl, og funktionen afsluttes.

Gennemgangskrav

mere end bare at tale om validering af Effektskalfunktionsparameter, resten af denne artikel vil have eksempler, som du kan kopiere og prøve på egen hånd. For at følge med har du brug for et par ting at følge med.

  • a Vinduer 10 computer med en hvilken som helst af Strømshellversionerne nedenfor:
  • vinduer Strømshell 5.1
  • Strømshell Core 6.2
  • Strømshell Core 7 (seneste udgivelse af denne skrivning er forhåndsvisning 4)
  • en scripteditor efter eget valg. Notepad++, ise eller Visual Studio Code.

forståelse af ValidateScript-Valideringsattributten

ValidateScript er en af de parametervalideringsattributter, der er tilgængelige til brug i Strømshell introduceret i Strømshell 3.0. Det kan tilføjes inde i parameterdefinitionsblokken for en funktion, eller det kan også bruges direkte i Kraftshell-konsollen.

ValidateScript bruges til at validere værdien af den parameter, du indtastede. Hvis valideringsresultatet er $true, fortsætter scriptet med at køre. På den anden side, hvis resultatet er $false, vil funktionen kaste en afslutningsfejl.

lad os dykke ind og se, hvordan det virker.

brug af ValidateScript i en funktion

den mest almindelige brug af ValidateScript-attributten er knyttet til en funktionsparameter. I dette afsnit opretter du en dummy-funktion og anvender validatescript parameter Validering.

dummy-funktionen udfører følgende handlinger:

  1. Accepter input for beløbet.
  2. Bekræft, om det indtastede beløb er lig med accepterede værdier.
  3. Kør processen, hvis valideringen bestået.
  4. Vis en fejl, hvis valideringen mislykkedes.

du lærer, hvordan du bygger denne funktion trin for trin i næste afsnit. Fyr op din script editor og begynde kodning!

Byg funktionen

Opret først en funktion og giv den et navn. Dette kan være ethvert navn, du vælger. Det er bedste praksis at følge verbum-Navneord navngivningskonvention for at gøre din funktion beskrivende. I dette eksempel skal du bruge navnet Get-Soda.

Function Get-Soda { param ()}

inde i param() – blokken skal du indsætte navnet på den parameter, du vil bruge, som er Bill.

Function Get-Soda { param ( $Bill )}

på dette tidspunkt udfører funktionen ikke noget endnu, men at acceptere nogen værdi for parameteren Bill.

sørg for, at du har kopieret funktionen Get-Soda til din konsol. Når funktionen er importeret til Strømshell-sessionen, skal du teste funktionen ved at køre kommandoen: Get-Soda -Bill 100.

når du kører funktionen Get-Soda, vil du bemærke, at der ikke kastes nogen fejl, og den gør intet. Det forventes på dette tidspunkt.

tilføjelse af Parametervalidering

måske vil du ikke tillade, at alle værdier overføres til parameteren Bill. Ved hjælp af den analogi, der er forklaret øverst i denne artikel, bør funktionen ikke tillade 100-regninger. Det bør kun tillade kr. 50 og kr. 20 regninger.

Tilføj validatescript-parametervalidering ved at indsætte før parameteren Bill. Din funktion skal ligne koden nedenfor.

Function Get-Soda { param ( $Bill )}

inde i blokken, indsæt valideringskoden {$_ -eq 20}. Denne valideringskode kontrollerer, om værdien, der leveres til regningsparameteren, er lig med 20. Nedenstående uddrag er, hvordan koden skal se ud.

Bemærk: $_ repræsenterer værdien af den aktuelle parameter i omfang. I dette eksempel er værdien $_værdien af parameteren Bill.

Function Get-Soda { param ( $Bill )}

Kør nu denne funktion igen for at bekræfte, at parametervalideringen fungerer ved at køre:

PS51> Get-Soda -Bill 20PS51> Get-Soda -Bill 30

nedenfor kan du se, at når 20 er bestået som en værdi, sker der intet, men når noget andet end 20 er bestået, kaster det en fejl.

fejl

når funktionen Get-Soda ikke kaster en fejl, betyder det, at funktionen udføres med succes. For at demonstrere det skal du tilføje følgende kode inde i funktionen for blot at returnere en besked til konsollen.

Write-Host "$Bill is an accepted value. Please select your soda."

funktionen Get-Soda vil så se ud som nedenfor:

Send nu en accepteret værdi som 20 til parameteren Bill. Du bør se resultatet nedenfor.

produktion af Get-Soda-bill 20

viser mere meningsfulde fejlmeddelelser

jeg er sikker på, at du nu har bemærket, at fejlmeddelelsen, der returneres, når parameterværdien ikke passerer Validering, ikke er meget intuitiv og grim.

valideringsfejl er uklar

Desværre er der intet du kan gøre ved, hvordan fejlen ser ud. Indtil en funktion, der muliggør formatering af valideringsfejlene, frigives (forhåbentlig), sidder du fast med den.

men det er muligt at forbedre det lidt og give mere mening til de fejl, der kan gavne dine brugere. Du vil se eksemplet på, hvordan du gør det næste.

tilføjelse af brugerdefineret valideringsfejl ved hjælp af vinduer (5.1)

udvidelse af funktionen Get-Soda er det muligt at kaste specifik fejlmeddelelse, når værdien ikke opfylder valideringen. For at gøre dette kan du tilføje en If/Then-konstruktion inde i ValidateScript-blokken.

Opret en simpel if/then-konstruktion som i nedenstående eksempel. I dette eksempel, hvis parameterværdien Bill ikke er lig med 20, returnerer den en fejlmeddelelse, du vælger (X is invalid. Valid value is 20 only.).

du kan se et eksempel på, hvordan dette ser ud nedenfor:

skærmbilledet nedenfor viser den brugerdefinerede fejlmeddelelse i aktion. Fejlen ser stadig grim ud, men denne gang er meddelelsen Klar og forståelig.

ValidateScript med en brugerdefineret fejlmeddelelse (Strømshell 5.1)

tilføjelse af brugerdefinerede valideringsfejl ved hjælp af (6+)

muligheden for at tilføje brugerdefinerede fejlmeddelelser til ValidateScript parameter Validering er allerede indbygget. Lad os kalde dette ErrorMessage teknik.

i den ændrede Get-Soda funktionskode nedenfor indeholder blokken nu en ErrorMessageegenskab, som kan bruges på plads throw. Nu i stedet for at bruge $_ variablen, kan du bruge {0}, som repræsenterer parameterværdien bestået.

skærmbilledet nedenfor viser, at den forventede output er nøjagtig den samme som ved brug af If-else og kaste teknik.

ValidateScript med en brugerdefineret fejlmeddelelse (Strømshell Core 7 eksempel 4)

eksempler på brug af ValidateScript

dette er nogle virkelige brugsscenarier, som ValidateScript kan anvendes til. Gennemgå og test disse eksempler, og prøv derefter at forbedre fejlmeddelelsen alene ved hjælp af de teknikker, du lærte i det foregående afsnit.

validering af Datoparameter

dette uddrag er en funktion, der accepterer en start-og en slutdato. Det udfører validering, at de indtastede datoer ikke er i fremtiden og ikke er ældre end 90 dage.

Test funktionen ved hjælp af disse kommandoer. Du kan angive dine egne startDate og endDate værdier

denne prøveudgang nedenfor er, når gyldige datoværdier indtastes.

Søg-Log resultat med gyldige dato parameterværdier

test det nu igen med startDate, der er ældre end 90 dage. Bekræft derefter, at fejlmeddelelsen vises.

vinduer Procesparameter Validering

dette næste uddrag er en funktion, der accepterer navnet på en proces. Det bekræfter, at processen kører i hukommelsen, dræber derefter alle kørende forekomster af denne proces eller afslutter afhængigt af valideringsresultatet.

Test det ved hjælp af denne kommando: Kill-Process -Name <process name>

prøveudgangen nedenfor forudsætter, at du tester med processen med navnet notepad.

  • den første kommando kørte med succes, fordi den fandt, at notepad-processen kørte og fortsatte med at dræbe den.
  • den anden kommando mislykkedes, da notepad ikke længere kører, og funktionen sluttede med den brugerdefinerede fejlmeddelelse, du oprettede.
Parameter Validering fejl

validering af parametre med en anden parameterværdi

nu skal du have en ide om værdien af at bruge ValidateScript i dine funktioner. Bu der er en begrænsning, der er værd at nævne. ValidateScript ‘ s omfang er kun inden for den anvendte parameter. Dette betyder, at en parameter ikke kan bruge værdien af andre parametre.

som en løsning kan krydsparameterværdikontrol udføres ved at få adgang til den automatiske variabel $PSBoundParameters.

måske har du en funktion kaldet Send-Spam. Denne funktion har tre parametre:

  1. From – afsenderens e-mail-adresse. (fx. ). Ikke obligatorisk.
  2. To – modtagerens e-mail-adresse. (fx. ). Ikke obligatorisk.
  3. SendEmail – en omskifterparameter, der ikke kræver en værdi. Men hvis det bruges, vil parameterværdierne From og To være påkrævet.

hvis SendEmail kontakten bruges, kører en valideringskode for at bekræfte, at parametrene From og To bruges. Derefter returnerer den værdien True. På den anden side, hvis From og To ikke er i brug, vil funktionen kaste en fejl og afslutte.

Kopier og indsæt koden nedenfor i din session.

kommandoen vist nedenfor vil resultere i en vellykket validering. Fordi parametrene From og To blev brugt sammen med SendEmail – kontakten.

PS51> Send-Spam -From -To -SendEmail
Output fra Send-Spam

test det nu uden at bruge parameteren From eller To. Dette skulle resultere i en fejl, fordi valideringsskriptet mislykkes. Se eksempelresultatet nedenfor.

kører Send-Spam uden parameteren til

brug af ValidateScript i konsollen

selvom den mest almindelige brug af attributten ValidateScript bruges til at validere funktionsparametre, kan den også bruges direkte fra konsollen. ValidateScript er nyttigt til at teste din valideringskode, selv før du inkorporerer den i et script eller en funktion.

nedenfor er nogle eksempler på brug af ValidateScript uden for en funktion.

validering af heltalsværdi

dette eksempel nedenfor validerer, at en given heltalsværdi er større end fem.

$i=4

efter at have kørt ovenstående kode mislykkes det forventede resultat, fordi den givne værdi er 4, hvilket er mindre end 5. Eksemplet skærmbillede nedenfor er, hvad du ville forvente at se.

Validering mislykkedes

validering af en datoværdi

den næste eksempelkode nedenfor viser, hvordan man validerer, at den givne dato er nyere end eller lig med den aktuelle dato.

$date = (Get-Date)$date = (Get-Date).AddHours(-1)

efter at have kørt den første linje i koden i ovenstående uddrag, overføres det forventede resultat (sandt), da den angivne DateTime-værdi er den samme eller et par sekunder større.

den anden kodelinje giver et mislykket resultat, fordi DateTime-værdien er en time mindre end den aktuelle tid. Se skærmbilledet nedenfor for prøveudgangen.

dato parameter Validering fiasko

oversigt

i denne artikel lærte du, hvilken parametervalidering der er, og hvordan du bruger attributten ValidateScript parameter validation.

du lærte også, hvordan du udvider dens evne til at vise en mere beskrivende fejlmeddelelse. Mens du følger eksemplerne, har du oplevet resultaterne af både vellykket og mislykket Validering.

du skal nu forstå begrænsningen af ValidateScript med hensyn til krydsparameterreferencer, og hvordan du kan løse denne begrænsning ved at bruge den automatiske variabel $PSBoundParameters.

jeg håber du har lært nok i denne artikel, som du kan anvende i din Kraftshell værktøj-Making rejse!

yderligere læsning

  • introduktion af Strømshellfunktioner
  • forståelse og opbygning af Kraftshellmoduler
  • validatescript validation attribut
  • om kast

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.