Hur Powershell Foreach, While, och andra Loops Work
Ett avgörande första steg i att lära sig programmering är att arbeta med loopar Den absoluta grunden för programmering för nybörjare (del 2) Absoluta grunderna för programmering för nybörjare (del 2) I del 2 av vår absoluta nybörjarguide till programmering kommer jag att täcka grunderna för funktioner, returvärden, loopar och villkor. Se till att du har läst del 1 innan du klarar 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 befintliga kommandon som du använder varje dag i loopar för att spara tid och ansträngning. Dina skrifter gör tunga lyft medan du gör det viktiga arbetet med att läsa mer 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.) Det här är en bra tid att prata om hur PowerShell hanterar data.
Liksom de flesta moderna programmeringsspråk är PowerShell objektorienterat. Var "Object Oriented" Programmering Hämta sitt namn? Var fick "Objektorienterad" programmering få sitt namn från? Objektorienterad är inte bara ett slumpmässigt buzzword som du hör i programmeringscirklar. Det finns en anledning bakom namnet - men vad? Följ med mig när jag utforskar några av grundarna för programmeringskoncept och förklara ... Läs mer. Allt i PowerShell är ett objekt vilket innebär att även variabler har utökade egenskaper och funktioner Powershell Cmdlets som kommer att förbättra dina Windows-administrativa färdigheter Powershell Cmdlets som kommer att förbättra dina Windows-administrativa färdigheter Powershell är lika delar kommandoradsverktyg och skriptspråk. Det ger dig möjligheten att automatisera din dator via samma kommandon som du använder för att administrera den. Läs mer . Den egenskapen är varför du kan ställa in dina sökningar till en variabel och sluta med en rad resultat.
$ yourVar = Get-ChildItem * foreach ($ fil i $ yourVar) dina steg
På vissa språk skulle behandlingen av denna array vara en process med flera steg. Först får du längden och räknar sedan upp varje steg.
I PowerShell går du igenom arrayen och utför åtgärden på var och en med ForEach. Detta sparar flera kodrader, vilket är till hjälp 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 av alla dina filer som du inte har öppnat inom 30 dagar.
Bygga ett arkivsystem med hjälp av ForEach Loops
Låt oss bryta ned stegen. Du använder Get-ChildItem för att få alla filer i dokumentmappen. Miljövivalen Vad är miljövariabler och hur kan jag använda dem? [Windows] Vad är miljövariabler och hur kan jag använda dem? [Windows] Jag kommer då och då att lära mig lite tips som får mig att tänka "ja, om jag visste att för ett år sedan skulle det ha sparat mig timmar". Jag minns levande hur jag läser ... 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 av den sökningen tilldelas variabeln $ MyDocs. Vi skapar sedan vår ForEach-slinga genom att ha det steg igenom var och en $ Doc i $ MyDocs.
$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documents" -Reserveringsfrämjande ($ doc i $ MyDocs) om ($ doc.LastAccessTime -lt $ (Get-Date) .addDays (-30)) $ oldDocs + = $ doc $ ArchiveFolder = Nyhet -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äfta $ false $ source = $ ArchiveFolder.FullName $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder.Name) .zip" Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile] :: CreateFromDirectory ($ source, $ destination) om (test-path $ destination) Remove-Item -Path $ ArchiveFolder -Recurse-Confirm $ false
Inuti slingan kontrollerar vi för att se om varje fil är LastAccessTime egendom är äldre än 30 dagar. Vi får det här med Get-Date cmdlet, och med användning av AddDays funktion med negativa trettio. Om det är så lägger vi till filen i $ myOldDocs array. När fil sorteringen är klar tar vi sedan vårt färdiga array och skapar en zip-fil. Denna process är lite mer komplicerad eftersom det innebär att man anropar lite. NET. Oroa dig inte om du inte förstår det - du kan stjäla koden från det här TechNet-hjälpdokumentet.
För att bryta ner vad som händer här: Vi flyttar alla våra gamla filer till en ny katalog som heter Dagens datum för äldre än 30 dagar. När den mappen bygger, måste vi skapa ZIP-arkivet med samma namn. Vi ska testa för att se till att arkivet lyckades och .ZIP-filen finns där och ta bort den nya mappen. Ange det som en schemalagd uppgift att köra en gång i månaden. Du sparar lite utrymme och håller din dokumentmapp ren.
Medan och gör medan: Loops på villkor
Om du bara vill köra en slinga när ett visst villkor är uppfyllt, använder du en slinga. Om du använder en variabel för att spåra uppräkningen, sätt den först.
i = 0 medan (i<10) Your Steps 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 exemplet manus nedan. Så i sådana fall vill du använda en Do-While-slinga. Hur gör-medan slingor arbetar med datorprogrammering. Hur fungerar-medan slingor arbetar med datorprogrammering Slingor är en av de första kontrolltyperna du lär dig i programmering. Du vet förmodligen om stund och för slingor, men vad åstadkommer en stund-slinga? Läs mer . Syntaxen är lite annorlunda.
gör dina steg medan (villkorligt uttalande)
Att använda dessa är inte helt lika uppenbart för en nybörjare programmerare. Att göra typiska dagliga skript kan du inte köra in i dem så ofta. Där de särskilt handlar är att göra en provisorisk timer för att testa framgången för en process.
Vi ska bygga ett snabbt skript för att starta om en fjärrmaskin och varna om den inte kommer tillbaka inom 15 minuter. Detta scenario förutsätter att det är en hemmaserver eller annan maskin som inte startar om mycket ofta. Känn dig fri att ställa in tiden om din dator vanligtvis kommer upp snabbare.
Starta om och kontrollera: Använd en Do-While Loop
Detta skript är lite enklare. Först använder du Starta om dator Kommando att starta om fjärrmaskinen. (Vi använde en dummy IP här för omstartskommandon, var noga med att skriva över det här med datorns DNS / IP). Skapa sedan räknevariabeln, jag och ställ in den till 0. Därefter har du din Do-loop med Start-Sleep stoppar manuset i 300 sekunder (fem minuter). Ett andra kommando lägger till en till räknaren.
Starta om-datorn-datornamn 127.0.0.1 i = 0 gör Start-Sleep -Seconds 300 $ i + = 1 medan ((! (Test-Connection 127.0.0.1 -Quiet)) eller $ i -gt 3) om $ i -gt 3) "Skriv-Ouput" Remote Machine svarar inte, kolla. " else Write-Output \ "Reboot succeeded
Då har vi våra Medan-kriterier. Vi använder ett Or-test för att säkerställa att ett fel genererar en varning. Alternativet är manusslingan väntar oändligt på fjärrmaskinen. För att kontrollera efter maskinen använder vi Testet-Anslutning cmdlet. För enkelhet är detta Ping för PowerShell. Vi lägger till parametern -Tyst vilket tvingar det att återvända True eller False snarare än resultaten av paketen. Den andra delen av Or-satsen kontrollerar om räknaren är mer än tre.
När slingan är klar vill vi skapa produktionen. Det betyder att vi måste kolla vår räknare. Detta är ett snabbt if / else uttalande. Om det är större än tre, visar skriptet att fjärrmaskinen inte svarar. Om det inte är det matar det ut att omstarten var framgångsrik.
Andra slingor
Det finns två andra slingor tillgängliga i PowerShell. De är något relaterade till de tidigare två slingorna, de är 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öra tills slingor är som Gör medan slingor, ändrar du bara Ställningen till tills. I exemplet manuset skulle det vara detsamma som beteende. Det är ett stilval, men Do While är mer mångsidigt i andra situationer. Så om du bara kommer ihåg en är Do While mer användbar.
PowerShell har också hjälp för alla dessa loopar. Du kan få hjälp genom att lägga till handla om före loop-namnet i Get-Help. Du kan sedan se exempel och andra tips för varje typ. Dessa bör vara till hjälp om du fastnar.
Fortsätter att växa med dig
På den här tiden har du de flesta färdigheter att börja bygga robusta skript. Om du vill automatisera din hemmariff 15 Avancerade uppgifter PowerShell kan hantera Windows 10 15 Avancerade uppgifter PowerShell kan hantera Windows 10 PowerShell liknar kommandotolken, men bättre. Det är ett kraftfullt systemadministrationsverktyg. Vi har sammanställt 15 uppgifter, några enkla, lite komplexa, som dra nytta av MagicShells magi. Läs mer eller spara 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 tips Hantera PowerShell-fel som en chef med dessa tips Det finns fyra delar i PowerShell-felhantering: felaktighetsparametern, försök / fångstblock, Felvariabel parameter och loggning. Lär dig hur du gör dem alla. Läs mer . Detta öppnar dörren till mer avancerade språk.
Vad är ett smart PowerShell-skript du har skapat med hjälp av loopar? Dela det med oss i kommentarerna.
Utforska mer om: PowerShell, Scripting.