Annons

Ett avgörande första steg i lärande programmering arbetar med slingor De absoluta grunderna i programmering för nybörjare (del 2)I del 2 av vår absoluta nybörjarguide för programmering kommer jag att täcka grunderna i funktioner, returvärden, slingor och balsam. Se till att du har läst del 1 innan du tacklar det här, där jag förklarade ... Läs mer . Tack och lov fortsätter PowerShell att växa med dina färdigheter.

Du kan rama de befintliga kommandona du använder varje dag i slingor för att spara tid och ansträngning. Dina skript gör det tunga lyft medan du gör det viktiga arbetet med att läsa fler artiklar om MakeUseOf!

Powershell ForEach Loops: Dörren till avancerad datahantering

ForEach är aliaset för ForEach-Object. (Ett alias är bara en genväg för ett kommando i PowerShell.) Detta är en bra tid att prata om hur PowerShell hanterar data.

Som de flesta moderna programmeringsspråk, PowerShell är objektorienterad Var fick "Objektorienterad" programmering sitt namn från?Objektorienterad är inte bara ett slumpmässigt surrord du hör i programmeringskretsar. Det finns en anledning bakom namnet - men vad? Följ med mig när jag utforskar några av grunderna i programmeringskoncept och förklarar ...

Läs mer . Allt i PowerShell är ett objekt, vilket betyder att även variabler har utökade egenskaper och funktioner Powershell Cmdlets som förbättrar dina Windows Admin-färdigheterPowershell är lika delar kommandoradsverktyg och skriptspråk. Det ger dig möjligheten att automatisera din dator med samma kommandon som du använder för att administrera den. Läs mer . Den egenskapen är därför du kan ställa in dina sökningar på en variabel och sluta med en rad resultat.

$ yourVar = Get-ChildItem * foreach ($ fil i $ yourVar) {Dina steg. }

På vissa språk skulle bearbetning av denna matris vara en flerstegsprocess. Först att få längden och sedan räkna upp varje steg.

I PowerShell går du igenom matrisen och utför åtgärden på var och en med hjälp av ForEach. Detta sparar flera kodrader, vilket är bra om du har ett längre skript. Till exempel är följande ett litet skript som skulle använda ett par Powershell ForEach-slingor. Det skapar ett ZIP-arkiv för alla dina filer som du inte har öppnat på 30 dagar.

Bygga ett filarkivsystem med hjälp av ForEach Loops

Låt oss bryta ned stegen. Du använder Get-ChildItem för att hämta alla filer i mappen Dokument. Miljövariabeln Vad är miljövariabler och hur kan jag använda dem? [Windows]Då och då lär jag mig ett litet tips som får mig att tänka "om jag visste att det för ett år sedan skulle ha sparat mig timmar". Jag minns levande hur jag ... Läs mer $ env: USERPROFILE kör skriptet med den aktuella profilen. Denna variabel är mer portabel än en hårdkodad sökväg. Resultaten från den sökningen tilldelas variabeln $ MyDocs. Vi skapar sedan vår ForEach-slinga genom att låta den gå igenom varje $ Doc i $ MyDocs.

$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Recurse. förhand ($ 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. Namn) "- Bekräfta $ falskt. } $ source = $ ArchiveFolder. Fullständiga namn. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Name) .zip" Add-Type -Ass AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory ($ källa, $ destination) if (testväg $ destination) {Ta bort-objekt-sökväg $ ArkivFolder -Recurse -Confirm $ false. }

Inuti slingan kontrollerar vi om varje fil är LastAccessTime Fastigheten är äldre än 30 dagar. Vi får detta med Get-Date cmdlet och använda AddDays funktion med negativa trettio. Om det är så lägger vi till filen till $ myOldDocs array. När filsorteringen är klar tar vi sedan vårt färdiga array och skapar en zip-fil. Den här processen är lite mer komplicerad eftersom den innebär att anropa lite .NET. Oroa dig inte om du inte helt fattar den - du kan stjäla koden från detta TechNet-hjälpdokument.

För att dela upp vad som händer här: Vi flyttar alla våra gamla filer till en ny katalog med namnet för dagens datum för äldre än 30 dagar. När den mappen har byggts måste vi skapa ZIP-arkivet med samma namn. Vi testar att arkivet lyckades och .ZIP-filen finns där och raderar sedan den nya mappen. Ställ in detta som en schemalagd uppgift som ska köras en gång i månaden. Du sparar dig lite utrymme och håller dokumentmappen ren.

Medan och gör medan: öglor på skick

Om du bara vill köra en slinga när ett visst villkor är uppfyllt använder du en While-loop. Om du använder en variabel för att spåra uppräkningen ställer du in den först.

i = 0. medan (i <10) {Dina steg i + = 1. }

Problemet är att om du inte använder en räknare kanske du vill att din kod ska köras minst en gång även om testet är sant. Detta är fallet med exempelskriptet nedan. Så i dessa fall, du vill använda en Do-While-loop Hur fungerar Loops medan datorprogrammeringLoops är en av de första kontrolltyperna du lär dig i programmering. Du vet förmodligen om medan och för öglor, men vad gör en do-while-slinga? Läs mer . Syntaxen är något annorlunda.

gör {dina steg. } while (Villkorligt uttalande)

Att använda dessa är inte lika uppenbart för en nybörjare. Om du gör typiska skript från dag till dag kanske du inte stöter på dem så ofta. Där de särskilt är praktiska är att skapa en provisorisk timer för att testa framgången för en process.

Vi kommer att bygga ett snabbt skript för att starta om en fjärrmaskin och varna om den inte kommer upp igen inom 15 minuter. Det här scenariot antar att det är en hemserver eller annan maskin som inte startar om så ofta. Du kan justera tiden om din dator vanligtvis kommer upp snabbare.

Starta om och kontrollera: Använd en Do-While-loop

Det här skriptet är lite enklare. Först använder du Starta om dator kommando för att starta om fjärrmaskinen. (Vi använde en dummy-IP här för omstartkommandon, se till att skriva över detta med din dators DNS / IP). Skapa sedan räknarvariabeln, jag och ställ in den på 0. Därefter har du din Do-loop med Start-Sleep som stoppar skriptet i 300 sekunder (fem minuter). Ett andra kommando lägger till ett i räknaren.

Starta om dator-datornamn 127.0.0.1. i = 0. gör {Start-Sleep -Seconds 300 $ i + = 1. } medan ((! (Test-anslutning 127.0.0.1-tyst)) -eller $ i -gt 3) if ($ i -gt 3) {Writ-Ouput "Fjärrmaskin svarar inte, vänligen kontrollera." } annat {Skrivutdata "Omstart lyckades" }

Sedan har vi våra While-kriterier. Vi använder ett Or-test för att säkerställa att ett fel genererar en varning. Alternativet är att skriptet loopar oändligt och väntar på fjärrmaskinen. För att leta efter maskinen använder vi Testet-Anslutning cmdlet. För enkelhetens skull är detta Ping för PowerShell. Vi lägger till parametern -Tyst vilket tvingar den att returnera True eller False snarare än resultaten från paketen. Den andra delen av Or-uttalandet kontrollerar om räknaren är mer än tre.

När slingan är klar vill vi skapa utgången. Det betyder att vi måste kontrollera räknaren. Detta är ett snabbt om / annars uttalande. Om det är större än tre matar skriptet ut att fjärrmaskinen inte svarar. Om det inte är det, matar det ut att omstarten var framgångsrik.

Andra slingor

Det finns två andra typer av slingor tillgängliga i PowerShell. De är något släkt med de tidigare två slingorna, de är bara inte lika vanliga. A For loop fungerar på samma sätt som While-exemplet. Du ställer in alla dina kriterier i utvärderingen och ställer sedan in dina cmdlets.

för ($ i = 0; $ i -lt 10; $ i ++) {Dina steg. }

Gör tills slingor är som gör medan slingor, du ändrar bara uttalandet av medan till. I exempelskriptet skulle det vara detsamma som beteende. Det är ett stilval, men Do While är mer mångsidig i andra situationer. Så om du bara kommer ihåg en är Do While mer användbart.

powershell förhandsslingor

PowerShell har också hjälp för var och en av dessa slingor. Du kan få hjälp genom att lägga till handla om före loopnamnet i Get-Help. Du kan sedan se exempel och andra tips för varje typ. Dessa borde vara till hjälp om du fastnar.

Fortsätter att växa med dig

Vid denna tidpunkt har du de flesta färdigheter att börja bygga robusta skript. Huruvida automatisera din hemrigg 15 Avancerade uppgifter PowerShell kan hantera i Windows 10PowerShell liknar kommandotolken, men bättre. Det är ett kraftfullt systemadministrationsverktyg. Vi har sammanställt 15 uppgifter, några enkla, några komplexa, som drar nytta av magin från PowerShell. Läs mer eller sparar tid på jobbet, loopar hjälper dina skript att göra mer. Kombinera dessa slingor med felhantering flyttar ditt skript utöver grunderna Hantera PowerShell-fel som en chef med dessa tipsPowerShell-felhantering har fyra delar. Lär dig hur du åtgärdar om fel och mer i Microsoft PowerShell. Läs mer . Detta öppnar dörren till mer avancerade språk.

Vad är ett smart PowerShell-skript som du har skapat med slingor? Dela det med oss ​​i kommentarerna.

Michael använde inte en Mac när de var dömda, men han kan koda i Applescript. Han har examen i datavetenskap och engelska; han har skrivit om Mac, iOS och videospel ett tag nu; och han har varit IT-apa på dagtid i över ett decennium, specialiserat på skript och virtualisering.