Sådan fungerer Powershell Foreach, Mens og andre sløjfer

  • Mark Lucas
  • 0
  • 4032
  • 1113
Reklame

Et vigtigt første skridt i at lære programmering er at arbejde med loops. Det absolutte grundlæggende i programmering for begyndere (del 2). Det absolutte grundlæggende ved programmering for begyndere (del 2) I del 2 af vores absolutte begynderguide til programmering vil jeg dække grundlæggende funktioner, returneringsværdier, sløjfer og konditioner. Sørg for, at du har læst del 1, før du takler dette, hvor jeg forklarede ... Heldigvis fortsætter PowerShell med at vokse med dine evner.

Du kan indramme de eksisterende kommandoer, du bruger hver dag i løkker for at spare tid og kræfter. Dine scripts udfører den tunge løft, mens du udfører det vigtige arbejde med at læse flere artikler om MakeUseOf!

Powershell ForEach Loops: Døren til avanceret datahåndtering

ForEach er aliaset for ForEach-objektet. (Et alias er kun en genvej til en kommando i PowerShell.) Dette er et godt tidspunkt at tale om, hvordan PowerShell håndterer data.

Som de fleste moderne programmeringssprog er PowerShell objektorienteret Hvor fik "Objektorienteret" -programmering navnet fra? Hvor fik "Objektorienteret" programmering navn fra det? Objektorienteret er ikke kun et tilfældigt buzzword, du hører i programmeringskredse. Der er en grund bag navnet - men hvad? Deltag i mig, mens jeg udforsker nogle af de grundlæggende elementer i programmeringskoncepter og forklarer…. Alt i PowerShell er et objekt, hvilket betyder, at selv variabler har udvidede egenskaber og funktioner Powershell Cmdlets, der forbedrer dit Windows Admin Skills Powershell Cmdlets, der forbedrer dit Windows Admin Skills Powershell er lige dele kommandolinjeværktøj og scriptingsprog. Det giver dig muligheden for at automatisere din computer via de samme kommandoer, du bruger til at administrere den. . Denne egenskab er grunden til at du kan indstille dine søgninger til en variabel og ende med en række resultater.

$ yourVar = Get-ChildItem * foreach ($ fil i $ yourVar) Dine trin 

På nogle sprog ville behandling af denne matrix være en multistep-proces. Først får du længden og tæller derefter hvert trin op.

I PowerShell går du gennem matrixen og udfører handlingen på hver enkelt ved hjælp af ForEach. Dette sparer dig for flere linjer med kode, hvilket er nyttigt, hvis du har et længere script. For eksempel er følgende et lille script, der bruger et par Powershell ForEach-løkker. Det opretter et ZIP-arkiv over alle dine filer, som du ikke har åbnet på 30 dage.

Opbygning af et filarkivsystem ved hjælp af ForEach-sløjfer

Lad os bryde trinnene ned. Du bruger Get-ChildItem for at hente alle filerne i mappen Dokumenter. Miljøvariablen Hvad er miljøvariabler, og hvordan kan jeg bruge dem? [Windows] Hvad er miljøvariabler, og hvordan kan jeg bruge dem? [Windows] Af og til lærer jeg et lille tip, der får mig til at tænke "godt, hvis jeg vidste, at det for et år siden ville have sparet mig timevis". Jeg husker levende at lære at… $ Env: USERPROFILE kører scriptet ved hjælp af den aktuelle profil. Denne variabel er mere bærbar end en hardkodet sti. Resultaterne af denne søgning er tildelt variablen $ MyDocs. Vi opretter derefter vores ForEach-loop ved at lade den gå gennem hver $ Doc i $ MyDocs.

$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurse foreach ($ doc i $ MyDocs) if ($ doc.LastAccessTime -lt $ (Get-Date) .addDays (-30)) $ oldDocs + = $ doc $ ArchiveFolder = New-Item -Path "$ ($ env: USERPROFILE) \ Documents \ $ (Get-Date -Format MMddyy) .toString ()) "-ItemType Directory foreach ($ doc i $ oldDocs) Move-Item -Path $ doc.FullName-Destination" $ ($ ArchiveFolder.FullName) \ $ ($ doc.Name) "-Bekræft $ false $ source = $ ArchiveFolder.FullName $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder.Name) .zip" Add-Type -AsamlingName "system.io.compression.filesystem" [io.compression.zipfile] :: CreateFromDirectory ($ source, $ destination) if (test-path $ destination) Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false 

Inde i løkken kontrollerer vi, om hver fil er LastAccessTime ejendom er ældre end 30 dage. Vi får dette med Get-Date cmdlet og brug af AddDays funktion med negativ tredive. Hvis det er tilfældet, tilføjer vi filen til $ myOldDocs array. Når filsorteringen er afsluttet, tager vi derefter vores udfyldte matrix og opretter en zip-fil. Denne proces er lidt mere kompliceret, da den involverer at påkalde en smule .NET. Bare rolig, hvis du ikke helt griber fat i den - du kan stjæle koden fra dette TechNet hjælpedokument.

For at nedbryde, hvad der sker her: Vi flytter alle vores gamle filer til et nyt bibliotek opkaldt til dagens dato i ældre end 30 dage. Når denne mappe er bygget, skal vi oprette ZIP-arkivet med samme navn. Vi tester for at sikre, at arkivet lykkedes, og .ZIP-filen er der, og sletter derefter den nye mappe. Indstil dette som en planlagt opgave, der skal køres en gang om måneden. Du sparer dig selv lidt plads og holder din Dokumentmappe ren.

Mens og gør mens: løkker på betingelse

Hvis du kun vil køre en løkke, når en bestemt betingelse er opfyldt, bruger du en Mens-løkke. Hvis du bruger en variabel til at spore optællingen, skal du indstille den først.

i = 0 mens (i<10) Your Steps i+=1  

Problemet er, at hvis du ikke bruger en tæller, vil du måske have din kode til at køre mindst en gang, selvom testen er sand. Dette er tilfældet med eksemplet script nedenfor. Så i disse tilfælde vil du bruge en Do-While-sløjfe. Hvordan-mens-looper fungerer i computerprogrammering. Hvordan-mens-loops fungerer i computerprogrammering-løkker er en af ​​de første kontroltyper, du lærer i programmering. Du ved sandsynligvis om mens og til sløjfer, men hvad opnår en do-while-loop? . Syntaks er lidt anderledes.

gør Dine trin mens (betinget erklæring) 

Brug af disse er ikke lige så indlysende for en nybegynder-programmør. Ved at lave typisk dag til dag scripting kan du måske ikke støde på dem så ofte. Hvor de især er nyttige, er at lave en provisorisk timer til test af en processes succes.

Vi vil opbygge et hurtigt script til at genstarte en ekstern maskine og advare, hvis den ikke kommer op igen inden for 15 minutter. Dette scenarie antager, at det er en hjemmeserver eller en anden maskine, der ikke genstarter meget ofte. Du er velkommen til at justere tiden, hvis din computer typisk kommer hurtigere op.

Genstart og kontroller: Brug af en do-while-loop

Dette script er lidt enklere. Først bruger du Genstart-computer kommando til at genstarte den eksterne maskine. (Vi brugte en dummy IP her til genstartkommandoer, sørg for at overskrive dette med din computers DNS / IP). Opret derefter tællervariablen, jeg og indstil det til 0. Derefter har du din Do-loop med Start-Sleep, der stopper scriptet i 300 sekunder (fem minutter). En anden kommando føjer en til tælleren.

Genstart-Computer-Computernavn 127.0.0.1 i = 0 do Start-Sleep-sekunder 300 $ i + = 1 mens ((! (Test-forbindelse 127.0.0.1-Quiet)) -eller $ i -gt 3) hvis ( $ i -gt 3) Skriv-Ouput "Fjernmaskine svarer ikke. Kontroller venligst."  andet Skriv-output "Genstart lykkedes" 

Så har vi vores While-kriterier. Vi bruger en Or-test for at sikre, at en fejl genererer en alarm. Alternativet er scriptet, der uendeligt løber, og venter på fjernmaskinen. For at tjekke om maskinen bruger vi Test-Forbindelse cmdlet. For enkelheds skyld er dette Ping for PowerShell. Vi tilføjer parameteren -Rolige hvilket tvinger det til at returnere sandt eller usant i stedet for pakkernes resultater. Den anden del af Or-sætningen kontrollerer, om tælleren er mere end tre.

Når løkken er færdig, ønsker vi at oprette output. Det betyder, at vi er nødt til at tjekke vores tæller. Dette er en hurtig, hvis / anden erklæring. Hvis det er større end tre, udsendes scriptet, at den eksterne maskine ikke svarer. Hvis det ikke er det, afgiver det, at genstarten var vellykket.

Andre løkker

Der er to andre slags sløjfer tilgængelige i PowerShell. De er noget relateret til de foregående to sløjfer, de er bare ikke så almindeligt anvendte. En For-loop fungerer på samme måde som eksempelet While. Du angiver alle dine kriterier i evalueringen og indstiller derefter dine cmdlets.

for ($ i = 0; $ i -lt 10; $ i ++) Dine trin 

Gør, indtil sløjfer er som Gør mens sløjfer, du ændrer bare udsagnet Mens til. I eksemplet script ville det være det samme som adfærd. Det er et stilvalg, men Do While er mere alsidig i andre situationer. Så hvis du kun husker en, er Do While mere nyttigt.

PowerShell har også hjælp til hver af disse sløjfer. Du kan få hjælp ved at tilføje om før loop-navnet i Get-Help. Du kan derefter se eksempler og andre tip til hver type. Disse skulle være nyttige, hvis du sidder fast.

Fortsætter med at vokse med dig

På dette tidspunkt har du de fleste af evnerne til at begynde at opbygge robuste scripts. Hvorvidt automatisering af din hjemmerig 15 Avancerede opgaver PowerShell kan håndtere i Windows 10 15 Avancerede opgaver PowerShell kan håndtere i Windows 10 PowerShell svarer til kommandoprompten, men bedre. Det er et kraftfuldt systemadministrationsværktøj. Vi har samlet 15 opgaver, nogle enkle, nogle komplekse, der drager fordel af magien fra PowerShell. eller sparer tid på arbejdet, løkker hjælper dine scripts med at gøre mere. Ved at kombinere disse sløjfer med fejlhåndtering flyttes din scripting ud over det grundlæggende Håndter PowerShell-fejl som en chef med disse tip Håndter PowerShell-fejl som en chef med disse tip Der er fire dele til PowerShell-fejlhåndtering: Parameteren Fejlhandling, Try / Catch blocks, the Fejl Variabel parameter og logging. Lær hvordan du gør dem alle. . Dette åbner døren til mere avancerede sprog.

Hvad er et smart PowerShell-script, du har oprettet ved hjælp af loops? Del det med os i kommentarerne.




Endnu ingen kommentarer

Om moderne teknologi, enkel og overkommelig.
Din guide i en verden af moderne teknologi. Lær hvordan du bruger de teknologier og gadgets, der omgiver os hver dag, og lær, hvordan du finder interessante ting på Internettet.