Reklame

Et vigtigt første skridt i at lære programmering arbejder med sløjfer Det absolutte grundlæggende ved programmering for begyndere (del 2)I del 2 af vores absolutte begynderguide til programmering vil jeg dække det grundlæggende om funktioner, returneringsværdier, loops og conditionals. Sørg for, at du har læst del 1, før du takler dette, hvor jeg forklarede ... Læs mere . 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, PowerShell er objektorienteret Hvor fik "Objektorienteret" programmering navn fra det?

instagram viewer
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 ... Læs mere . Alt i PowerShell er et objekt, hvilket betyder, at selv variabler har udvidede egenskaber og funktioner Powershell Cmdlets, der forbedrer dine Windows-administratorfærdighederPowershell 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. Læs mere . 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 vil bruge 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]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 ... Læs mere $ 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 få den til at 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) \ $ ($ dok. Navn) "- Bekræft $ falsk. } $ source = $ ArchiveFolder. Fulde navn. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Navn) .zip" Tilføj-type-samling Navn "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ kilde, $ destination) if (test-sti $ destination) {Fjern-vare -Pad $ ArkivFolder -Recurse -Confirm $ falsk. }

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 forstår det - du kan stjæle koden fra dette TechNet hjælpedokument.

For at fordele 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 While-loop. Hvis du bruger en variabel til at spore optællingen, skal du indstille den først.

i = 0. mens (i <10) {Dine trin 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 du vil bruge en Do-While-loop Sådan fungerer looper ved computerprogrammeringLoops 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? Læs mere . Syntaks er lidt anderledes.

gør {dine trin. } while (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 oprette et hurtigt script til at genstarte en fjernmaskine 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. gør {Start-Sleep-sekunder 300 $ i + = 1. } mens ((! (Testforbindelse 127.0.0.1-Stille)) -eller $ i -gt 3) hvis ($ i -gt 3) {Skriv-Ouput "Fjernmaskine svarer ikke, skal du tjekke." } 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'en. For enkelheds skyld er dette Ping for PowerShell. Vi tilføjer parameteren -Rolige hvilket tvinger det til at returnere sandt eller falsk i stedet for pakkernes resultater. Den anden del af Or-erklæringen 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 if / else-erklæring. Hvis det er større end tre, sender scriptet ud, 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 loops 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 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 foreach løkker

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. Om automatisering af dit hjem rig 15 Avancerede opgaver PowerShell kan håndtere i Windows 10PowerShell ligner 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. Læs mere eller sparer tid på arbejdet, løkker hjælper dine scripts med at gøre mere. Kombination af disse løkker med fejlhåndtering flytter din scripting ud over det grundlæggende Håndter PowerShell-fejl som en chef med disse tipPowerShell-fejlhåndtering har fire dele. Lær hvordan du løser, hvis der er fejl med mere i Microsoft PowerShell. Læs mere . Dette åbner døren til mere avancerede sprog.

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

Michael brugte ikke en Mac, da de var dømt, men han kan kode i Applescript. Han har grader i datalogi og engelsk; han har skrevet om Mac, iOS og videospil i et stykke tid nu; og han har været en IT-abe på dagen i over et årti og har specialiseret sig i scripting og virtualisering.