Hvordan Powershell Foreach, While, og andre Loops Work

Hvordan Powershell Foreach, While, og andre Loops Work / programmering

Et avgjørende første trinn i å lære programmering er å jobbe med løkker. Absolute grunnleggende programmering for nybegynnere (del 2) Absolutt grunnleggende programmering for nybegynnere (del 2) I del 2 av vår absolutte nybegynnere guide til programmering, vil jeg dekke Grunnleggende om funksjoner, returverdier, sløyfer og conditionals. Pass på at du har lest del 1 før du takler dette, der jeg forklarte ... Les mer. Heldigvis fortsetter PowerShell å vokse med dine ferdigheter.

Du kan ramme de eksisterende kommandoene du bruker hver dag i løkker for å spare tid og krefter. Skriptene dine løfter tungt mens du gjør det viktige arbeidet med å lese flere artikler om MakeUseOf!

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

ForEach er aliaset for ForEach-Object. (Et alias er bare en snarvei for en kommando i PowerShell.) Dette er en god tid å snakke om hvordan PowerShell håndterer data.

Som de fleste moderne programmeringsspråk, er PowerShell objektorientert. Hvor ble "Object Oriented" Programming hentet navn fra? Hvor fikk "Object Oriented" Programmering få navnet sitt? Objektorientert er ikke bare et tilfeldig buzzword du hører i programmeringssirkler. Det er en grunn bak navnet - men hva? Bli med meg da jeg utforsker noen av grunnleggende programmeringskonsepter og forklarer ... Les mer. Alt i PowerShell er et objekt, noe som betyr at selv variabler har utvidede egenskaper og funksjoner Powershell Cmdlets som vil forbedre Windows Admin Ferdigheter Powershell Cmdlets som vil forbedre Windows Admin Ferdigheter Powershell er like deler kommandolinje verktøy og skriptspråk. Det gir deg muligheten til å automatisere datamaskinen din via de samme kommandoene du bruker til å administrere den. Les mer . Den egenskapen er hvorfor du kan sette søkene dine til en variabel, og ende opp med en rekke resultater.

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

På noen språk vil behandling av dette arrayet være en flertallsprosess. Først får du lengden og teller opp hvert trinn.

I PowerShell går du gjennom arrayet og utfører handlingen på hver enkelt bruker ForEach. Dette sparer deg for flere linjer med kode, noe som er nyttig hvis du har et lengre skript. For eksempel er følgende et lite skript som ville bruke et par Powershell ForEach-looper. Det oppretter et ZIP-arkiv av alle filene du ikke har åpnet om i 30 dager.

Bygg et filarkivsystem ved hjelp av ForEach Loops

La oss bryte trinnene nedover. Du bruker Get-ChildItem for å få alle filene i Dokumenter-mappen. Miljøvariabelen Hva er miljøvariabler og hvordan kan jeg bruke dem? [Windows] Hva er miljøvariabler og hvordan kan jeg bruke dem? [Windows] Nå og da skal jeg lære et lite tips som får meg til å tenke "vel, hvis jeg visste at for et år siden da ville det ha spart meg timer". Jeg husker levende å lære hvordan å ... Les mer $ Env: USERPROFILE kjører skriptet med den aktuelle profilen. Denne variabelen er mer bærbar enn en hardkodet bane. Resultatene av det søket er tildelt variabelen $ MyDocs. Vi lager vår ForEach-løkke ved å ha det gjennom hvert $ Dok i $ MyDocs.

$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Research foreach ($ doc i $ MyDocs) hvis ($ doc.LastAccessTime -lt $ (Get-Date) .addDays (-30)) $ oldDocs + = $ doc $ ArchiveFolder = Nyelement -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) "- Bekreft $ false $ source = $ ArchiveFolder.FullName $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder.Name) .zip" Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile] :: CreateFromDirectory ($ kilde, $ destinasjon) hvis (test-sti $ destinasjon) Fjern-element -Path $ ArchiveFolder -Recurse -Confirm $ false 

Inne i løkken, sjekker vi for å se om hver fil er LastAccessTime Eiendommen er eldre enn 30 dager. Vi får dette med Get-Date cmdlet, og bruk av AddDays fungere med negativ tretti. Hvis det er, legger vi filen til $ myOldDocs array. Etter at fil sorteringen er fullført, tar vi deretter vårt fullførte utvalg og oppretter en zip-fil. Denne prosessen er litt mer komplisert, da det innebærer å påkalle litt. NET. Ikke bekymre deg hvis du ikke forstår det - du kan stjele koden fra dette TechNet-hjelpedokumentet.

For å bryte ned hva som skjer her: Vi vil flytte alle våre gamle filer til en ny katalog oppkalt etter dagens dato i eldre enn 30 dager. Når den mappen bygger, må vi opprette ZIP-arkivet med samme navn. Vi tester for å sikre at arkivet lykkes og .ZIP-filen er der, og deretter slett den nye mappen. Sett dette som en planlagt oppgave å kjøre en gang i måneden. Du sparer litt plass og holder Dokumenter-mappen ren.

Mens og gjør mens: Loops on Condition

Hvis du bare vil kjøre en sløyfe når en bestemt tilstand er oppfylt, bruker du en løkke mens du drar. Hvis du bruker en variabel til å spore opptelningen, må du sette den først.

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

Problemet er at hvis du ikke bruker en teller, vil du kanskje at koden skal kjøres minst én gang, selv om testen er sann. Dette er tilfellet med eksemplet skriptet nedenfor. Så i de tilfellene vil du bruke en Do-While-sløyfe. Hvordan gjør-mens looper jobber med dataprogrammering. Hvordan gjør-mens looper jobber med dataprogrammering Looper er en av de første kontrolltypene du vil lære i programmering. Du vet sannsynligvis om mens og for looper, men hva oppnår en runde? Les mer . Syntaxen er litt annerledes.

gjør dine trinn mens (betinget erklæring) 

Å bruke disse er ikke helt så åpenbare for en nybegynnerprogrammerer. Å gjøre typiske daglige skripting, kan du ikke løpe inn i dem som ofte. Hvor de spesielt kommer til nytte er å lage en provisorisk timer for å teste suksessen til en prosess.

Vi skal bygge et raskt skript for å starte en ekstern maskin og varsle om den ikke kommer opp igjen innen 15 minutter. Dette scenariet antar at det er en hjemmeserver eller annen maskin som ikke starter opp ofte. Du er velkommen til å justere tiden hvis datamaskinen din vanligvis kommer opp raskere.

Reboot og Check: Bruk en Do-While Loop

Dette skriptet er litt enklere. Først bruker du Restart-Computer kommandoen for å starte den eksterne maskinen på nytt. (Vi brukte en dummy IP her for omstartskommandoer, husk å overskrive dette med datamaskinens DNS / IP). Opprett deretter tellervariabelen, Jeg og sett den til 0. Deretter har du din Do-loop med Start-Sleep, stopper skriptet i 300 sekunder (fem minutter). En annen kommando legger til en til disken.

Restart-Computer -ComputerName 127.0.0.1 i = 0 gjør Start-Sleep -Seconds 300 $ i + = 1 mens ((! (Test-Connection 127.0.0.1 -Quiet)) eller $ i -gt 3) hvis $ i -gt 3) "Skriv-Ouput" -maskinen svarer ikke, vennligst sjekk. "  else Write-Output "Reboot Succeeded" 

Da har vi våre kriteriene under. Vi bruker en Or-test for å sikre at en feil genererer et varsel. Alternativet er manussløyfen venter uendelig på den eksterne maskinen. For å sjekke om maskinen bruker vi Test-Connection cmdlet. For enkelhet er dette Ping for PowerShell. Vi legger til parameteren -Stille som tvinger den til å returnere sann eller falsk snarere enn resultatene av pakkene. Den andre delen av Or-setningen sjekker om telleren er mer enn tre.

Når sløyfen er fullført, ønsker vi å opprette produksjonen. Det betyr at vi må sjekke vår disk. Dette er en rask if / else setning. Hvis det er større enn tre, utfører skriptet at den eksterne maskinen ikke svarer. Hvis det ikke er det, kommer det ut at omstartingen var vellykket.

Andre løkker

Det finnes to andre typer looper tilgjengelig i PowerShell. De er noe relatert til de to tidligere løkkene, de er bare ikke så vanlige. A For-sløyfe fungerer på samme måte som mens eksempelet. Du angir alle dine kriterier i evalueringen, og sett deretter dine cmdlets.

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

Gjør inntil looper er som Gjør mens looper, endrer du bare utsagnet Mens til. I eksemplet skriptet, ville det være det samme så langt som oppførsel. Det er et stilvalg, men Do While er mer allsidig i andre situasjoner. Så hvis du bare husker en, gjør While er mer nyttig.

PowerShell har også hjelp for hver av disse sløyfer. Du kan få hjelpen ved å legge til handle om før løkkenavnet i Get-Help. Du kan da se eksempler og andre tips for hver type. Disse bør være nyttige hvis du sitter fast.

Fortsetter å vokse med deg

På dette punktet har du mesteparten av ferdighetene til å starte byggeprosessen. Enten du automatiserer hjemmeanlegget 15 Avanserte oppgaver PowerShell kan håndtere i Windows 10 15 Avanserte oppgaver PowerShell kan håndtere Windows 10 PowerShell ligner på ledeteksten, men bedre. Det er et kraftig systemadministrasjonsverktøy. Vi har samlet 15 oppgaver, noen enkle, noen komplekse, som drar nytte av magien til PowerShell. Les mer eller spar tid på jobben, sløyfer hjelper skriptene dine til å gjøre mer. Kombinere disse løkkene med feilhåndtering beveger skriptet utover det grunnleggende. Håndtere PowerShell-feil som en chef med disse tipsene Håndtere PowerShell-feil som en chef med disse tipsene Det er fire deler til PowerShell-feilhåndtering: Feilhandling-parameteren, Prøv / Fangstblokker, Feilvariabel parameter og logging. Lær hvordan du gjør dem alle. Les mer . Dette åpner døren til mer avanserte språk.

Hva er et smart PowerShell-skript du har opprettet ved hjelp av sløyfer? Del det med oss ​​i kommentarene.

Utforsk mer om: PowerShell, Scripting.