Kaip veikia „Powershell Foreach“, „while“ ir kitos kilpos

Kaip veikia „Powershell Foreach“, „while“ ir kitos kilpos

Svarbus pirmas žingsnis mokantis programavimo yra darbas su kilpomis. Laimei, „PowerShell“ ir toliau auga kartu su jūsų įgūdžiais.





kaip atkurti „Facebook“ paskyrą per draugus

Norėdami sutaupyti laiko ir pastangų, galite įrėminti esamas komandas, kurias naudojate kasdien. Jūsų scenarijai yra sunkūs, o jūs atliekate svarbų darbą, skaitydami daugiau straipsnių apie „MakeUseOf“!





„Powershell ForEach“ kilpos: durys į išplėstinį duomenų tvarkymą

„ForEach“ yra „ForEach-Object“ slapyvardis. (Pseudonimas yra tik „PowerShell“ komandos nuoroda.) Tai tinkamas laikas kalbėti apie tai, kaip „PowerShell“ tvarko duomenis.





Kaip ir dauguma šiuolaikinių programavimo kalbų, „PowerShell“ yra orientuota į objektus. Viskas „PowerShell“ yra objektas, o tai reiškia, kad net kintamieji turi išplėstines savybes ir funkcijas . Dėl šios savybės savo paieškas galite nustatyti kaip kintamąjį ir baigti daugybe rezultatų.

$yourVar = Get-ChildItem *
foreach ($file in $yourVar){
Your Steps
}

Kai kuriomis kalbomis šio masyvo apdorojimas būtų daugiapakopis procesas. Pirma, gaukite ilgį ir tada suskaičiuokite kiekvieną žingsnį.



„PowerShell“ jūs einate per masyvą ir kiekvieną veiksmą atliekate naudodami „ForEach“. Taip sutaupysite kelias kodo eilutes, o tai naudinga, jei turite ilgesnį scenarijų. Pavyzdžiui, toliau pateikiamas nedidelis scenarijus, kuriame būtų naudojama pora „Powershell ForEach“ kilpų. Tai sukuria visų jūsų failų, kuriuos neatidarėte per 30 dienų, ZIP archyvą.

Failų archyvo sistemos kūrimas naudojant „ForEach Loops“

Sulaužykime žingsnius žemyn. Tu naudoji Get-ChildItem gauti visus failus aplanke Dokumentai. Aplinkos kintamasis $ env: USERPROFILE paleidžia scenarijų naudodami dabartinį profilį. Šis kintamasis yra labiau nešiojamas nei užkoduotas kelias. Tos paieškos rezultatai priskiriami kintamajam $ MyDocs . Tada mes sukuriame savo „ForEach“ kilpą, pereidami ją per kiekvieną $ Doc, esantį $ MyDocs .





$oldDocs = @()
$MyDocs = Get-ChildItem -Path '$($env:USERPROFILE)Documents' -Recurse
foreach ($doc in $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 in $oldDocs){
Move-Item -Path $doc.FullName -Destination '$($ArchiveFolder.FullName)$($doc.Name)' -Confirm $false
}
$source = $ArchiveFolder.FullName
$destination = '$($env:USERPROFILE)Documents$($ArchiveFolder.Name).zip'
Add-Type -AssemblyName 'system.io.compression.filesystem'
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
if(test-path $destination){
Remove-Item -Path $ArchiveFolder -Recurse -Confirm $false
}

Ciklo viduje patikriname, ar kiekvienas failas yra LastAccessTime turtas yra senesnis nei 30 dienų. Mes tai gauname su Gauti datą cmdlet ir naudodami AddDays funkcija su neigiamu trisdešimt. Jei taip, pridedame failą prie $ myOldDocs masyvas. Užbaigus failų rūšiavimą, mes paimame užbaigtą masyvą ir sukuriame ZIP failą. Šis procesas yra šiek tiek sudėtingesnis, nes apima šiek tiek .NET iškvietimą. Nesijaudinkite, jei to nesuprantate - galite pavogti kodą šį „TechNet“ pagalbos dokumentą .

Norėdami išardyti tai, kas vyksta čia: visus senus failus perkelsime į naują katalogą, pavadintą šiandienos datai, vyresniam nei 30 dienų. Sukūrę tą aplanką, turime sukurti to paties pavadinimo ZIP archyvą. Mes išbandysime, ar archyvas pavyko ir ar yra .ZIP failas, tada ištrinsime naują aplanką. Nustatykite tai kaip suplanuotą užduotį, kuri bus vykdoma kartą per mėnesį. Sutaupysite šiek tiek vietos ir aplankas „Dokumentai“ bus švarus.





Nors ir daryk: ciklai dėl būklės

Jei norite paleisti ciklą tik tada, kai įvykdyta tam tikra sąlyga, naudokite ciklą „Nors“. Jei naudojate kintamąjį skaičiuoti, pirmiausia nustatykite.

i=0
while(i<10){
Your Steps
i+=1
}

Problema ta, kad jei nenaudojate skaitiklio, galbūt norėsite, kad jūsų kodas būtų paleistas bent kartą, net jei testas yra teisingas. Taip yra žemiau pateikto scenarijaus pavyzdyje. Taigi tokiais atvejais norite naudoti „Do-while“ kilpą. Sintaksė šiek tiek skiriasi.

do{
Your Steps
}while(Conditional Statement)

Jų naudojimas pradedantiesiems programuotojams nėra toks akivaizdus. Atlikdami įprastus kasdienius scenarijus, galite su jais nesusidurti taip dažnai. Jie ypač praverčia padaryti laikiną laikmatį, kad būtų galima patikrinti proceso sėkmę.

kaip pamatyti savo sekėjus „Facebook“

Mes sukursime greitą scenarijų, kaip iš naujo paleisti nuotolinį kompiuterį ir įspėti, jei jis negrįš per 15 minučių. Pagal šį scenarijų daroma prielaida, kad tai yra namų serveris ar kita mašina, kuri nėra dažnai perkraunama. Nesivaržykite koreguoti laiko, jei jūsų kompiuteris paprastai įsijungia greičiau.

Perkraukite ir patikrinkite: naudodami „Do-while“ ciklą

Šis scenarijus yra šiek tiek paprastesnis. Pirma, jūs naudojate Iš naujo paleiskite kompiuterį komandą iš naujo paleisti nuotolinį kompiuterį. (Čia naudojome netikrą IP perkrovimo komandoms, būtinai perrašykite tai savo kompiuterio DNS/IP). Tada sukurkite skaitiklio kintamąjį, i ir nustatykite jį į 0. Toliau turite „Do“ ciklą, kai „Start-Sleep“ sustabdo scenarijų 300 sekundžių (penkias minutes). Antroji komanda prideda vieną prie skaitiklio.

Restart-Computer -ComputerName 127.0.0.1
i=0
do{
Start-Sleep -Seconds 300
$i += 1
}while((!(Test-Connection 127.0.0.1 -Quiet)) -or $i -gt 3)
if($i -gt 3){
Write-Ouput 'Remote Machine not responding, please check.'
}
else{
Write-Output 'Reboot Succeeded'
}

Tada mes turime savo kriterijus. Mes naudojame arba testą, kad įsitikintume, jog gedimas sukuria įspėjimą. Alternatyva yra scenarijaus ciklas be galo laukiant nuotolinio kompiuterio. Norėdami patikrinti mašiną, naudojame Bandomasis ryšys cmdlet. Paprastumo dėlei tai yra „Ping for PowerShell“. Pridedame parametrą -Tyliai kuris verčia grąžinti tikrąjį ar klaidingą, o ne paketų rezultatus. Antroje teiginio Arba dalyje tikrinama, ar skaitiklis yra daugiau nei trys.

Kai ciklas bus baigtas, norime sukurti išvestį. Tai reiškia, kad turime patikrinti savo skaitiklį. Tai greitas „jei/kitaip“ teiginys. Jei jis yra didesnis nei trys, scenarijus parodo, kad nuotolinis aparatas nereaguoja. Jei ne, tai parodo, kad perkrovimas buvo sėkmingas.

Kitos kilpos

„PowerShell“ yra dar dviejų tipų kilpos. Jie yra šiek tiek susiję su ankstesnėmis dviem kilpomis, jie nėra taip dažnai naudojami. A Ciklas veikia panašiai kaip pavyzdys Nors. Vertindami nustatote visus kriterijus, tada nustatote cmdlet.

for($i = 0;$i -lt 10;$i++){
Your Steps
}

„Daryti iki“ kilpos yra panašios į „Do while“ ciklus, tiesiog pakeiskite „Who“ teiginį į „Iki“. Pavyzdiniame scenarijuje jis būtų toks pat kaip elgesys. Tai stiliaus pasirinkimas, tačiau „Do Do“ yra universalesnis kitose situacijose. Taigi, jei prisimenate tik vieną, „Do while“ yra naudingesnis.

„PowerShell“ taip pat padeda kiekvienai iš šių kilpų. Pagalbos galite gauti pridėję apie prieš ciklo pavadinimą „Get-Help“. Tada galite pamatyti kiekvieno tipo pavyzdžius ir kitus patarimus. Tai turėtų būti naudinga, jei įstrigsite.

Toliau augti kartu su jumis

Šiuo metu turite daug įgūdžių, kad galėtumėte pradėti kurti tvirtus scenarijus. Nesvarbu, ar automatizuojate savo namų įrenginį, ar taupote laiką darbe, kilpos padeda jūsų scenarijams padaryti daugiau. Sujungus šias kilpas su klaidų tvarkymu, jūsų scenarijus peržengia pagrindus. Tai atveria duris į pažangesnes kalbas.

Kas yra protingas „PowerShell“ scenarijus, kurį sukūrėte naudodami kilpas? Pasidalinkite ja su mumis komentaruose.

Dalintis Dalintis „Tweet“ Paštu Ištrinkite šiuos „Windows“ failus ir aplankus, kad atlaisvintumėte vietos diske

Reikia išvalyti vietos diske „Windows“ kompiuteryje? Čia yra „Windows“ failai ir aplankai, kuriuos galima saugiai ištrinti, kad būtų atlaisvinta vietos diske.

Skaityti toliau
Susijusios temos
  • Programavimas
  • „PowerShell“
  • Scenarijaus rašymas
Apie autorių Michaelas McConnelis(Paskelbti 44 straipsniai)

Michaelas nenaudojo „Mac“, kai jie buvo pasmerkti, tačiau jis gali koduoti „Applescript“. Jis turi informatikos ir anglų kalbos laipsnius; jis jau kurį laiką rašo apie „Mac“, „iOS“ ir vaizdo žaidimus; ir jis daugiau nei dešimtmetį buvo dienos beždžionė, specializavusi scenarijų kūrimo ir virtualizavimo srityse.

nustatyti animuotą gif kaip „Windows 10“ ekrano foną
Daugiau iš Michael McConnell

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia