Hogyan működik a Powershell Foreach, while és egyéb hurkok

Hogyan működik a Powershell Foreach, while és egyéb hurkok

A programozás tanulásának döntő első lépése a ciklusokkal való munka. Szerencsére a PowerShell tovább növekszik a készségeivel.





Az usb portok nem működnek a Windows 10 rendszerben

Az idő és erőfeszítés megtakarítása érdekében a minden nap használt meglévő parancsokat keretbe foglalhatja. A forgatókönyvei elvégzik a nehéz feladatokat, miközben Ön fontos munkát végez, és további cikkeket olvas a MakeUseOf -on!





Powershell ForEach Loops: Ajtó a fejlett adatkezeléshez

A ForEach a ForEach-Objektum álneve. (Az Alias ​​csupán egy parancsikon a PowerShell parancsához.) Itt az ideje, hogy beszéljünk arról, hogyan kezeli a PowerShell az adatokat.





A legtöbb modern programozási nyelvhez hasonlóan a PowerShell is objektum-orientált. A PowerShellben minden objektum, vagyis még a változók is kiterjesztett tulajdonságokkal és funkciókkal rendelkeznek . Ez a tulajdonság az oka annak, hogy a kereséseket változóra állíthatja, és végül egy tömböt kaphat az eredményekből.

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

Bizonyos nyelveken ennek a tömbnek a feldolgozása többlépéses folyamat lenne. Először a hossz meghatározása, majd az egyes lépések számolása.



A PowerShellben lépjen át a tömbön, és végezze el a műveletet mindegyiken a ForEach használatával. Ez több sornyi kódot takarít meg, ami hasznos, ha hosszabb szkriptet használ. Például a következő egy kis szkript, amely néhány Powershell ForEach hurkot használna. ZIP archívumot hoz létre az összes olyan fájlból, amelyet 30 napja nem nyitott meg.

Fájlarchívum -rendszer kiépítése a ForEach Loops használatával

Bontsuk le a lépéseket. Használod Get-ChildItem hogy megkapja az összes fájlt a Dokumentumok mappában. A környezeti változó $ env: USERPROFILE futtatja a szkriptet az aktuális profil használatával. Ez a változó hordozhatóbb, mint a keménykódolt útvonal. A keresés eredményei hozzá vannak rendelve a változóhoz $ MyDocs . Ezután létrehozzuk a ForEach ciklusunkat úgy, hogy végighaladunk mindegyiken $ Doc a $ MyDocs szolgáltatásban .





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

A cikluson belül ellenőrizzük, hogy minden fájl rendelkezik -e LastAccessTime az ingatlan 30 napnál régebbi. Ezt kapjuk a Get-Date parancsmagot, és a AddDays függvény negatív harminccal. Ha igen, akkor hozzáadjuk a fájlt a $ myOldDocs sor. A fájlok rendezésének befejezése után vesszük a befejezett tömböt, és létrehozunk egy zip fájlt. Ez a folyamat egy kicsit bonyolultabb, mivel magában foglal egy kis .NET meghívását. Ne aggódjon, ha nem teljesen fogja fel - ellophatja a kódot ezt a TechNet súgó dokumentumot .

Az itt történtek lebontása: Az összes régi fájlunkat áthelyezzük egy új könyvtárba, amely a mai dátumra vonatkozik, 30 napnál régebben. Miután ez a mappa felépült, létre kell hoznunk az azonos nevű ZIP archívumot. Teszteljük, hogy megbizonyosodjunk arról, hogy az archiválás sikeres volt, és a .ZIP fájl ott van, majd töröljük az új mappát. Állítsa be ezt ütemezett feladatként havonta egyszer. Kis helyet takaríthat meg, és tisztán tartja a Dokumentumok mappát.





Míg és csinálj közben: hurkok az állapoton

Ha csak bizonyos feltételek teljesülése esetén szeretne ciklust futtatni, használja a while ciklust. Ha változót használ a számlálás követésére, akkor először állítsa be.

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

A probléma az, hogy ha nem használ számlálót, érdemes lehet, hogy a kód legalább egyszer fusson, még akkor is, ha a teszt igaz. Ez a helyzet az alábbi példa szkripttel. Tehát ezekben az esetekben Do-while ciklust szeretne használni. A szintaxis kissé eltér.

do{
Your Steps
}while(Conditional Statement)

Ezek használata nem olyan nyilvánvaló egy kezdő programozó számára. Ha tipikus napi szkripteket végez, előfordulhat, hogy nem fog olyan gyakran összefutni velük. Különösen hasznosak, ha rögtönzött időzítőt készítenek egy folyamat sikerének tesztelésére.

mennyi pénzt keresnek a programozók

Gyors szkriptet fogunk készíteni a távoli gép újraindításához, és figyelmeztetjük, ha 15 percen belül nem jön vissza. Ez a forgatókönyv feltételezi, hogy ez egy otthoni szerver vagy más gép, amely nem túl gyakran indul újra. Nyugodtan állítsa be az időt, ha a számítógépe általában gyorsabban érkezik.

Újraindítás és ellenőrzés: Do-while hurok használata

Ez a szkript egy kicsit egyszerűbb. Először használja a Indítsa újra a számítógépet parancsot a távoli gép újraindításához. (Itt egy dummy IP címet használtunk az újraindítási parancsokhoz, ezt mindenképpen írja felül a számítógép DNS/IP -jével). Ezután hozza létre a számláló változót, én és állítsa 0-ra. Ezután a Do ciklusa a Start-Sleep leállítja a szkriptet 300 másodpercre (öt perc). A második parancs egyet hozzáad a számlálóhoz.

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

Akkor megvannak a while kritériumaink. Vagy tesztet használunk annak biztosítására, hogy a hiba riasztást generáljon. Az alternatíva a szkript végtelen ciklusa a távoli gépre várva. A gép ellenőrzéséhez a Teszt-kapcsolat parancsmag. Az egyszerűség kedvéért ez a Ping for PowerShell. Hozzáadjuk a paramétert -Csendes ami arra kényszeríti, hogy a csomagok eredményei helyett igazat vagy hamisat adjon vissza. Az Or utasítás második része azt ellenőrzi, hogy a számláló több mint három.

Miután a ciklus befejeződött, létre akarjuk hozni a kimenetet. Ez azt jelenti, hogy ellenőriznünk kell a számlálónkat. Ez egy gyors if/else kijelentés. Ha háromnál nagyobb, akkor a szkript azt eredményezi, hogy a távoli gép nem válaszol. Ha nem, akkor azt jelzi, hogy az újraindítás sikeres volt.

Egyéb hurkok

A PowerShellben két másik hurok is rendelkezésre áll. Ezek némileg kapcsolódnak az előző két hurokhoz, csak nem olyan általánosan használtak. A For ciklus a Míg példához hasonlóan működik. Az értékelés során beállítja az összes feltételt, majd beállítja a parancsmagokat.

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

A Do Do ciklusok olyanok, mint a Do While ciklusok, csak módosítsd a While utasítást amíg. A példa szkriptben a viselkedés tekintetében ugyanaz lenne. Ez stílusválasztás, de a Do While sokoldalúbb más helyzetekben. Tehát ha csak egyre emlékszik, akkor a Do Do hasznosabb.

A PowerShell mindegyik hurokhoz is segítséget nyújt. Hozzáadással kaphat segítséget ról ről a Get-Help ciklus neve előtt. Ezután példákat és egyéb tippeket láthat az egyes típusokhoz. Ezek hasznosak lehetnek, ha elakad.

Továbbra is nőni veled

Ezen a ponton rendelkezik a legtöbb készséggel ahhoz, hogy robusztus szkripteket készítsen. Akár automatizálja otthoni berendezését, akár időt takarít meg a munkahelyen, a hurkok segítenek a szkriptekben, hogy többet tegyenek. Ha ezeket a ciklusokat kombinálja a hibakezeléssel, akkor a szkriptek túlmutatnak az alapokon. Ez megnyitja az utat a fejlettebb nyelvek felé.

Mi az az okos PowerShell -parancsfájl, amelyet hurkok segítségével hozott létre? Ossza meg velünk a megjegyzésekben.

Részvény Részvény Csipog Email Törölje ezeket a Windows fájlokat és mappákat a lemezterület felszabadításához

Törölnie kell a lemezterületet a Windows számítógépen? Íme a Windows fájlok és mappák, amelyek biztonságosan törölhetők a lemezterület felszabadítása érdekében.

Olvassa tovább
Kapcsolódó témák
  • Programozás
  • PowerShell
  • Forgatókönyvírás
A szerzőről Michael McConnell(44 cikk megjelent)

Michael nem használt Mac -et, amikor el voltak ítélve, de Applescriptben tud kódolni. Számítástechnikai és angol diplomával rendelkezik; már egy ideje Macről, iOS -ről és videojátékokról ír; és több mint egy évtizede nappali informatikai majom, szkriptekre és virtualizációra szakosodott.

hogyan lehet visszaszerezni a sorozatát
Továbbiak Michael McConnell -től

Iratkozzon fel hírlevelünkre

Csatlakozz hírlevelünkhöz, ahol technikai tippeket, értékeléseket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!

Feliratkozáshoz kattintson ide