Annonse
Et avgjørende første skritt inn å lære programmering jobber med løkker De absolutte grunnleggende programmene for nybegynnere (del 2)I del 2 av vår absolutte nybegynnerveiledning for programmering skal jeg dekke det grunnleggende om funksjoner, returverdier, løkker og kondisjoner. Forsikre deg om 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 inn de eksisterende kommandoene du bruker hver dag i løkker for å spare tid og krefter. Skriptene dine gjør det tunge løftet mens du gjør det viktige arbeidet med å lese flere artikler på MakeUseOf!
Powershell ForEach Loops: The Door to Advanced Data Handling
ForEach er aliaset for ForEach-Object. (Et alias er bare en snarvei for en kommando i PowerShell.) Dette er et godt tidspunkt å snakke om hvordan PowerShell håndterer data.
Som de fleste moderne programmeringsspråk, PowerShell er objektorientert Hvor fikk "objektorientert" programmering navnet sitt fra? Objektorientert er ikke bare et tilfeldig buzzword du hører i programmeringssirkler. Det er en grunn bak navnet - men hva? Bli med meg når jeg utforsker noen av grunnleggende elementene i programmeringskonsepter og forklarer ... Les mer . Alt i PowerShell er et objekt, noe som betyr at til og med variabler har utvidede egenskaper og funksjoner Powershell Cmdlets som vil forbedre Windows-administratorferdighetene dinePowershell er like deler kommandolinjeverktøy og skriptspråk. Det gir deg muligheten til å automatisere datamaskinen din via de samme kommandoene du bruker for å administrere den. Les mer . Denne egenskapen er grunnen til at du kan angi 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 prosessering av denne matrisen være en flerstegsprosess. Først å få lengden og deretter telle opp hvert trinn.
I PowerShell går du gjennom matrisen og utfører handlingen på hver enkelt ved hjelp av ForEach. Dette sparer flere kodelinjer, noe som er nyttig hvis du har et lengre skript. For eksempel er følgende et lite skript som vil bruke et par Powershell ForEach-løkker. Det oppretter et ZIP-arkiv med alle filene du ikke har åpnet på 30 dager.
Bygge et filarkivsystem ved å bruke ForEach Loops
La oss bryte trinnene. Du bruker Get-ChildItem for å hente alle filene i mappen Dokumenter. Miljøvariabelen Hva er miljøvariabler, og hvordan kan jeg bruke dem? [Windows]Nå og da lærer jeg et lite tips som får meg til å tenke "vel, hvis jeg visste at for et år siden, hadde det spart meg timer". Jeg husker levende hvordan jeg lærte å ... Les mer $ env: USERPROFILE kjører skriptet ved å bruke den gjeldende profilen. Denne variabelen er mer bærbar enn en hardkodet bane. Resultatene fra det søket tilordnes variabelen $ MyDocs. Vi oppretter deretter ForEach-loopen ved å la den gå gjennom 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-Destinasjon "$ ($ ArchiveFolder. Fullname) \ $ ($ doc. Navn) "- Bekreft $ falsk. } $ source = $ ArchiveFolder. Fullt navn. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Navn) .zip" Tilleggstype -samlingName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ kilde, $ destinasjon) if (test-path $ destination) {Remove-Item -Path $ ArchiveFolder -Recurse -Confirm $ false. }
Inne i løkka sjekker vi om hver fil er LastAccessTime eiendommen er eldre enn 30 dager. Dette får vi med Get-Date cmdlet, og bruk AddDays funksjon med negativ tretti. Hvis den er det, legger vi filen til $ myOldDocs array. Etter at filssorteringen er fullført, tar vi deretter den fullførte matrisen og lager en zip-fil. Denne prosessen er litt mer komplisert ettersom den innebærer å påkalle litt .NET. Ikke bekymre deg hvis du ikke helt fatter det - du kan stjele koden fra dette TechNet hjelpedokumentet.
For å fordele hva som skjer her: Vi vil flytte alle de gamle filene våre til en ny katalog med navn på dagens dato for eldre enn 30 dager. Når den mappen bygger seg, må vi lage ZIP-arkivet med samme navn. Vi tester for å sikre at arkivet lyktes og .ZIP-filen er der, og deretter sletter den nye mappen. Sett dette som en planlagt oppgave som skal kjøres en gang i måneden. Du sparer deg litt plass og holder Dokumenter-mappen ren.
Mens og gjør mens: løkker på betingelse
Hvis du bare vil kjøre en sløyfe når en bestemt betingelse er oppfylt, bruker du en Mens-loop. Hvis du bruker en variabel for å spore opptellingen, må du angi den først.
i = 0. mens (i <10) {Trinnene dine i + = 1. }
Problemet er at hvis du ikke bruker en teller, vil du kanskje at koden din skal kjøres minst en gang selv om testen er sann. Dette er tilfellet med eksemplet manus nedenfor. Så i de tilfellene, du vil bruke en Do-While-loop Slik fungerer looper i dataprogrammeringLooper er en av de første kontrolltypene du lærer i programmering. Du vet sikkert om mens og for løkker, men hva oppnår en gjør-mens-loop? Les mer . Syntaksen er litt annerledes.
gjør {dine trinn. } while (Betinget uttalelse)
Å bruke disse er ikke like opplagt for en nybegynner-programmerer. Hvis du bruker typisk dag-til-dag-scripting, kan det hende du ikke støter på det ofte. Der de spesielt kommer godt med er å lage en provisorisk timer for å teste suksessen til en prosess.
Vi skal lage et raskt skript for å starte en ekstern maskin på nytt og varsle om den ikke kommer opp igjen innen 15 minutter. Dette scenariet antar at det er en hjemmeserver eller en annen maskin som ikke starter på nytt veldig ofte. Juster gjerne tiden hvis datamaskinen vanligvis kommer opp raskere.
Start på nytt og sjekk: Bruke en gjør-mens-sløyfe
Dette skriptet er litt enklere. Først bruker du Restart-Computer kommando for å starte den eksterne maskinen på nytt. (Vi brukte en dummy IP her for omstartkommandoene, sørg for å overskrive dette med datamaskinens DNS / IP). Lag deretter tellervariabelen, Jeg og sett den til 0. Deretter har du Do-loopen din når Start-Sleep stopper skriptet i 300 sekunder (fem minutter). En andre kommando legger en til i telleren.
Restart-Computer -ComputerName 127.0.0.1. i = 0. gjør {Start-Sleep-sekunder 300 $ i + = 1. } while ((! (Test-tilkobling 127.0.0.1-Quiet)) -eller $ i -gt 3) if ($ i -gt 3) {Writ-Ouput "Ekstern maskin svarer ikke, vennligst sjekk." } annet {Skriv-output "Reboot Succeeded" }
Så har vi våre While-kriterier. Vi bruker en Or-test for å sikre at en feil genererer et varsel. Alternativet er at skriptet looper uendelig og venter på den eksterne maskinen. For å se etter maskinen bruker vi Test-Connection cmdlet. For enkelhets skyld er dette Ping for PowerShell. Vi legger til parameteren -Stille som tvinger den til å returnere sann eller usann i stedet for resultatene fra pakkene. Den andre delen av Or-uttalelsen sjekker om telleren er mer enn tre.
Når løkken er fullført, ønsker vi å lage utdataene. Det betyr at vi må sjekke disken vår. Dette er en rask hvis / annet uttalelse. Hvis det er større enn tre, gir skriptet ut at den eksterne maskinen ikke svarer. Hvis det ikke er det, gir det ut at omstarten var vellykket.
Andre løkker
Det er to andre typer løkker tilgjengelig i PowerShell. De er noe relatert til de to foregående løkkene, de er bare ikke så ofte brukt. A For loop fungerer på samme måte som eksemplet Mens. Du angir alle kriteriene dine i evalueringen, og angir deretter cmdlets.
for ($ i = 0; $ i -lt 10; $ i ++) {dine trinn. }
Gjør inntil løkker er som Gjør mens looper, endrer du bare uttalelsen Mens til. I eksemplet manus, ville det være det samme som oppførsel. Det er et stilvalg, men Do While er mer allsidig i andre situasjoner. Så hvis du bare husker en, er Do While mer nyttig.
PowerShell har hjelp for hver av disse løkkene. Du kan få hjelp ved å legge til Om før sløyfenavnet i Get-Help. Du kan deretter se eksempler og andre tips for hver type. Disse skal være nyttige hvis du blir sittende fast.
Fortsetter å vokse med deg
På dette tidspunktet har du de fleste ferdighetene til å begynne å bygge robuste skript. Om automatisere hjemriggen 15 Avanserte oppgaver PowerShell kan håndtere i Windows 10PowerShell ligner på ledeteksten, men bedre. Det er et kraftig systemadministrasjonsverktøy. Vi har samlet 15 oppgaver, noen enkle, noen komplekse, som drar fordel av magien fra PowerShell. Les mer eller sparer tid på jobben, hjelper løkker skriptene dine til å gjøre mer. Kombinere disse løkkene med feilhåndtering flytter skriptingen utover det grunnleggende Håndter PowerShell-feil som en sjef med disse tipseneFeilhåndtering i PowerShell har fire deler. Lær hvordan du løser om feil og mer i Microsoft PowerShell. Les mer . Dette åpner døren til mer avanserte språk.
Hva er et smart PowerShell-skript du har laget ved hjelp av løkker? Del det med oss i kommentarene.
Michael brukte ikke en Mac da de ble dømt, men han kan kode i Applescript. Han har grader innen informatikk og engelsk; han har skrevet om Mac, iOS og videospill i en stund nå; og han har vært IT-ape på dagtid i over et tiår, og har spesialisert seg på skripting og virtualisering.