Jak Powershell Foreach, While a další smyčky fungují

Jak Powershell Foreach, While a další smyčky fungují

Zásadním prvním krokem při učení programování je práce se smyčkami. Naštěstí PowerShell s vašimi schopnostmi stále roste.





jak spojit dva obrázky dohromady

Stávající příkazy, které používáte každý den, můžete zarámovat do smyček, abyste ušetřili čas a úsilí. Vaše skripty zvládnou těžkou práci, zatímco vy si přečtete další články o MakeUseOf!





Powershell ForEach Loops: Dveře k pokročilému zpracování dat

ForEach je alias pro ForEach-Object. (Alias ​​je pouze zkratkou pro příkaz v prostředí PowerShell.) Nyní je vhodné mluvit o způsobu, jakým PowerShell zpracovává data.





Stejně jako většina moderních programovacích jazyků je PowerShell objektově orientovaný. Všechno v PowerShell je objekt, což znamená, že i proměnné mají rozšířené vlastnosti a funkce . To je důvod, proč můžete svá vyhledávání nastavit na proměnnou a skončit s řadou výsledků.

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

V některých jazycích by zpracování tohoto pole bylo vícestupňovým procesem. Nejprve zjistěte délku a pak odpočítejte každý krok.



V prostředí PowerShell procházíte polem a na každém z nich provádíte akci pomocí ForEach. To vám ušetří několik řádků kódu, což je užitečné, pokud máte delší skript. Následuje například malý skript, který by použil několik smyček Powershell ForEach. Vytvoří ZIP archiv všech vašich souborů, které jste neotevřeli 30 dní.

Budování systému archivů souborů pomocí smyček ForEach

Pojďme rozebrat kroky dolů. Používáš Get-ChildItem pro získání všech souborů ve složce Dokumenty. Proměnná prostředí $ env: UŽIVATELSKÝ PROFIL spustí skript pomocí aktuálního profilu. Tato proměnná je přenosnější než pevně zadaná cesta. Výsledky tohoto vyhledávání jsou přiřazeny k proměnné $ MyDocs . Poté vytvoříme naši smyčku ForEach tím, že ji projdeme každou $ 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
}

Uvnitř smyčky kontrolujeme, zda jsou všechny soubory LastAccessTime nemovitost je starší než 30 dní. Dostaneme to s Získat datum cmdlet a pomocí AddDays funkce se zápornou třicítkou. Pokud ano, přidáme soubor do souboru $ myOldDocs pole. Po dokončení řazení souborů vezmeme naše dokončené pole a vytvoříme soubor zip. Tento proces je trochu komplikovanější, protože zahrnuje vyvolání trochu .NET. Nebojte se, pokud to zcela nepochopíte - kód můžete ukrást tento dokument nápovědy TechNet .

Abychom rozdělili, co se tady děje: Přesuneme všechny naše staré soubory do nového adresáře pojmenovaného podle dnešního data na více než 30 dní. Jakmile se tato složka vytvoří, musíme vytvořit stejnojmenný archiv ZIP. Otestujeme, abychom se ujistili, že archiv proběhl úspěšně, a je tam soubor .ZIP, a poté odstraníme novou složku. Nastavte to jako naplánovaný úkol, který se má spouštět jednou za měsíc. Ušetříte si trochu místa a složku Dokumenty budete udržovat čistou.





Zatímco a dělat, zatímco: Smyčky na podmínce

Pokud chcete spustit smyčku, pouze když je splněna konkrétní podmínka, použijete smyčku While. Pokud ke sledování počítáte pomocí proměnné, nejprve ji nastavte.

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

Problém je v tom, že pokud nepoužíváte čítač, možná budete chtít, aby se váš kód spustil alespoň jednou, i když je test pravdivý. To je případ níže uvedeného skriptu. V takových případech tedy chcete použít smyčku Do-While. Syntaxe se mírně liší.

do{
Your Steps
}while(Conditional Statement)

Jejich použití není pro začínajícího programátora tak samozřejmé. Když provádíte běžné každodenní skriptování, nemusíte na ně tak často narazit. Obzvláště užitečné, je vytvořit provizorní časovač pro testování úspěchu procesu.

kolik stojí mlb tv

Vytvoříme rychlý skript pro restart vzdáleného počítače a upozorníme vás, pokud se do 15 minut nevrátí. Tento scénář předpokládá, že se jedná o domácí server nebo jiný počítač, který se nerestartuje příliš často. Pokud se váš počítač obvykle objeví rychleji, můžete čas upravit.

Restartujte a zkontrolujte: Pomocí smyčky Do-While

Tento skript je o něco jednodušší. Nejprve použijete Restartujte počítač příkaz k restartování vzdáleného počítače. (Pro příkazy k restartu jsme použili fiktivní IP adresu, nezapomeňte ji přepsat DNS/IP vašeho počítače). Poté vytvořte proměnnou čítače, a nastavte jej na 0. Dále máte svoji smyčku Do se Start-Sleep, která zastaví skript na 300 sekund (pět minut). Druhý příkaz přidá jeden do čítače.

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

Pak máme naše kritéria While. Používáme test Or, abychom zajistili, že selhání vygeneruje výstrahu. Alternativou je nekonečné čekání skriptů na vzdálený počítač. Ke kontrole stroje používáme Testovací připojení cmdlet. Pro jednoduchost je to Ping pro PowerShell. Přidáme parametr -Klid což jej nutí vrátit True nebo False spíše než výsledky paketů. Druhá část příkazu Or zkontroluje, zda je čítač více než tři.

Jakmile se smyčka dokončí, chceme vytvořit výstup. To znamená, že musíme zkontrolovat náš pult. Toto je rychlý příkaz if/else. Pokud je větší než tři, skript vydá výstup, na který vzdálený počítač nereaguje. Pokud tomu tak není, zobrazí se, že restart byl úspěšný.

Jiné smyčky

V prostředí PowerShell jsou k dispozici dva další druhy smyček. Jsou poněkud příbuzné předchozím dvěma smyčkám, jen nejsou tak běžně používané. Smyčka For funguje podobně jako v příkladu While. Při hodnocení nastavíte všechna svá kritéria a poté nastavíte rutiny.

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

Smyčky Do Before jsou jako smyčky Do While, stačí změnit příkaz While na Do. V příkladu skriptu by to bylo stejné jako chování. Je to volba stylu, ale Do While je univerzálnější v jiných situacích. Pokud si tedy pamatujete pouze jeden, je užitečnější Do While.

PowerShell má nápovědu také pro každou z těchto smyček. Pomoc můžete získat přidáním o před názvem smyčky v Get-Help. U každého typu si pak můžete prohlédnout příklady a další tipy. Ty by měly být užitečné, pokud se zaseknete.

Pokračujeme v růstu s vámi

V tomto okamžiku máte většinu dovedností začít vytvářet robustní skripty. Ať už automatizujete domácí zařízení nebo šetříte čas v práci, smyčky pomáhají vašim skriptům dělat více. Kombinací těchto smyček se zpracováním chyb se vaše skriptování dostane mimo základy. To otevírá dveře pokročilejším jazykům.

Co je to chytrý skript PowerShell, který jste vytvořili pomocí smyček? Podělte se o to s námi v komentářích.

Podíl Podíl tweet E-mailem Vymažte tyto soubory a složky systému Windows, abyste uvolnili místo na disku

Potřebujete uvolnit místo na disku v počítači se systémem Windows? Zde jsou soubory a složky systému Windows, které lze bezpečně odstranit, aby se uvolnilo místo na disku.

Číst dále
Související témata
  • Programování
  • Prostředí PowerShell
  • Skriptování
O autorovi Michael McConnell(44 článků zveřejněno)

Michael nepoužíval Mac, když byli odsouzeni k zániku, ale umí kódovat v Applescriptu. Vystudoval počítačovou vědu a angličtinu; už nějakou dobu píše o počítačích Mac, iOS a videohrách; a je to denní IT opice více než deset let, specializující se na skriptování a virtualizaci.

nelze přesouvat aplikace na sd kartu android
Více od Michaela McConnella

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru