Ako funguje Powershell Foreach, While a ďalšie slučky

Ako funguje Powershell Foreach, While a ďalšie slučky

Zásadným prvým krokom v učení programovania je práca so slučkami. Našťastie PowerShell rastie s vašimi schopnosťami.





najlepšie 2d plošinovky všetkých čias

Existujúce príkazy, ktoré každý deň používate, môžete zarámovať do slučiek, aby ste ušetrili čas a námahu. Vaše skripty zvládnu všetky náročné úlohy a vy si prečítate ďalšie články na stránke MakeUseOf!





Powershell ForEach Loops: brána do pokročilého spracovania údajov

ForEach je alias ForEach-Object. (Alias ​​je iba skratkou pre príkaz v PowerShell.) Teraz je vhodné hovoriť o spôsobe, akým PowerShell narába s údajmi.





Rovnako ako väčšina moderných programovacích jazykov je PowerShell objektovo orientovaný. Všetko v PowerShell je objekt, to znamená, že dokonca aj premenné majú rozšírené vlastnosti a funkcie . To je dôvod, prečo môžete svoje vyhľadávania nastaviť na premennú a skončiť tak s poľom výsledkov.

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

V niektorých jazykoch by spracovanie tohto poľa bolo viacstupňovým procesom. Najprv zistite dĺžku a potom odpočítajte každý krok.



V prostredí PowerShell prechádzate poľom a na každom z nich vykonávate akciu pomocou ForEach. Ušetrí vám to niekoľko riadkov kódu, čo je užitočné, ak máte dlhší skript. Nasleduje napríklad malý skript, ktorý by použil niekoľko slučiek Powershell ForEach. Vytvorí ZIP archív všetkých vašich súborov, ktoré ste neotvorili 30 dní.

Budovanie systému archívu súborov pomocou slučiek ForEach

Poďme rozobrať kroky nižšie. Používaš Get-ChildItem na získanie všetkých súborov v priečinku Dokumenty. Premenná prostredia $ env: USERPROFILE spustí skript pomocou aktuálneho profilu. Táto premenná je prenosnejšia než napevno zakódovaná cesta. Výsledky tohto vyhľadávania sú priradené k premennej $ MyDocs . Potom vytvoríme našu slučku ForEach tak, že prejdeme každou z nich $ Doc v $ 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
}

Vo vnútri slučky kontrolujeme, či sú všetky súbory LastAccessTime nehnuteľnosť je staršia ako 30 dní. Zistíme to pomocou Dátum schôdzky cmdlet a pomocou AddDays funkcia s mínus tridsiatkou. Ak je, pridáme súbor do súboru $ myOldDocs pole. Po dokončení triedenia súborov potom vezmeme naše dokončené pole a vytvoríme súbor zip. Tento proces je trochu komplikovanejší, pretože zahŕňa vyvolanie trochu rozhrania .NET. Ak to celkom nepochopíte, nie je dôvod sa znepokojovať - ​​kód môžete ukradnúť tento dokument pomoci TechNet .

Aby sme rozobrali, čo sa tu deje: Presunieme všetky naše staré súbory do nového adresára s dnešným dátumom starším ako 30 dní. Akonáhle sa tento priečinok vytvorí, musíme vytvoriť rovnomenný ZIP archív. Otestujeme, či je archív úspešný a či sa tam nachádza súbor .ZIP, a potom odstráňte nový priečinok. Nastavte to ako naplánovanú úlohu, ktorá sa má spustiť raz za mesiac. Ušetríte málo miesta a priečinok Dokumenty budete udržiavať čistý.





Kým a robiť, kým: Slučky na podmienke

Ak chcete spustiť slučku iba vtedy, ak je splnená konkrétna podmienka, použijete slučku While. Ak na sledovanie počítania používate premennú, najskôr ju nastavte.

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

Problém je v tom, že ak nepoužívate počítadlo, možno budete chcieť, aby sa váš kód spustil aspoň raz, aj keď je test pravdivý. To je prípad nižšie uvedeného ukážkového skriptu. V týchto prípadoch teda chcete použiť slučku Do-While. Syntax je mierne odlišná.

do{
Your Steps
}while(Conditional Statement)

Ich použitie nie je pre začínajúceho programátora také zrejmé. Keď robíte bežné denné skriptovanie, možno sa s nimi tak často nestretnete. Najmä tam, kde sa hodia, je vytvoriť provizórny časovač na testovanie úspechu procesu.

najlepšia aplikácia nahrávacieho štúdia pre Android

Vytvoríme rýchly skript na reštartovanie vzdialeného počítača a upozorníme ho, ak sa do 15 minút nevráti. Tento scenár predpokladá, že ide o domáci server alebo iný počítač, ktorý sa nereštartuje príliš často. Ak sa váš počítač zvyčajne vyskytuje rýchlejšie, môžete čas upraviť.

Reštartujte a skontrolujte: pomocou slučky Do-While

Tento skript je o niečo jednoduchší. Najprv použijete Reštartujte počítač príkaz na reštartovanie vzdialeného počítača. (Na príkazy na reštartovanie sme použili fiktívnu IP adresu, uistite sa, že to prepíšete DNS/IP vášho počítača). Potom vytvorte premennú počítadla, i a nastavte ho na 0. Ďalej máte svoju slučku Do so štart-spánkom zastavením skriptu na 300 sekúnd (päť minút). Druhý príkaz pridá jeden na počítadlo.

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'
}

Potom tu máme kritériá Kým. Používame test Or, aby sme zaistili, že zlyhanie vygeneruje upozornenie. Alternatívou je nekonečné cyklovanie skriptu, ktoré čaká na vzdialený počítač. Na kontrolu stroja používame Testovacie pripojenie cmdlet. Pre jednoduchosť je to Ping pre PowerShell. Doplníme parameter -Ticho čo ho núti vrátiť True alebo False namiesto výsledkov paketov. Druhá časť príkazu Or kontroluje, či je počítadlo viac ako tri.

Akonáhle sa slučka dokončí, chceme vytvoriť výstup. To znamená, že musíme skontrolovať náš pult. Toto je rýchle vyhlásenie, ak/inak. Ak je väčšia ako tri, skript spustí, že vzdialený počítač nereaguje. Ak nie je, zobrazí sa, že reštart bol úspešný.

Ostatné slučky

V prostredí PowerShell sú k dispozícii dva ďalšie druhy slučiek. Trochu súvisia s predchádzajúcimi dvoma slučkami, len nie sú tak bežne používané. Smyčka For funguje podobne ako v príklade While. Pri hodnotení nastavíte všetky svoje kritériá a potom nastavíte rutiny.

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

Cykly Do Do sú ako slučky Do While, stačí zmeniť príkaz While na Do. V príklade skriptu by to bolo rovnaké, pokiaľ ide o správanie. Je to voľba štýlu, ale funkcia Do While je univerzálnejšia v iných situáciách. Ak si teda pamätáte iba jeden, užitočnejší je postup Do While.

PowerShell má pomoc aj pre každú z týchto slučiek. Pomoc môžete získať pridaním o pred názvom slučky v Get-Help. Potom si môžete pozrieť príklady a ďalšie tipy pre každý typ. Tieto by mali byť nápomocné, ak uviaznete.

Pokračujte v raste s vami

V tomto okamihu máte väčšinu schopností začať vytvárať robustné skripty. Či už zautomatizujete svoju domácu zostavu alebo ušetríte čas v práci, slučky pomôžu vašim skriptom urobiť viac. Kombinácia týchto slučiek s spracovaním chýb posúva vaše skriptovanie nad rámec základov. To otvára dvere pokročilejším jazykom.

Čo je to múdry skript PowerShell, ktorý ste vytvorili pomocou slučiek? Podeľte sa o to s nami v komentároch.

zdieľam zdieľam Tweet E -mail Odstráňte tieto súbory a priečinky systému Windows, aby ste uvoľnili miesto na disku

Potrebujete uvoľniť miesto na disku v počítači so systémom Windows? Tu sú súbory a priečinky Windows, ktoré je možné bezpečne odstrániť, aby sa uvoľnilo miesto na disku.

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • PowerShell
  • Skriptovanie
O autorovi Michael McConnell(44 publikovaných článkov)

Michael nepoužil Mac, keď boli odsúdení na zánik, ale vie kódovať v Applescripte. Vyštudoval počítačovú vedu a angličtinu; už nejaký čas píše o počítačoch Mac, iOS a videohrách; a on je dennou IT opicou viac ako desať rokov a špecializuje sa na skriptovanie a virtualizáciu.

google odmeny, ako získať viac prieskumov
Viac od Michaela McConnella

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber