Kako Powershell Foreach, While i druge petlje funkcioniraju

Kako Powershell Foreach, While i druge petlje funkcioniraju

Ključni prvi korak u učenju programiranja je rad s petljama. Srećom, PowerShell nastavlja rasti s vašim vještinama.





može li Windows čitati proširene Mac OS

Postojeće naredbe koje svakodnevno koristite možete uokviriti kako biste uštedjeli vrijeme i trud. Vaše skripte čine težak posao dok radite važan posao čitajući više članaka o MakeUseOf!





Powershell ForEach petlje: vrata naprednom rukovanju podacima

ForEach je pseudonim za ForEach-Object. (Alias ​​je samo prečica za naredbu u PowerShellu.) Ovo je dobro vrijeme za razgovor o načinu na koji PowerShell obrađuje podatke.





Kao i većina modernih programskih jezika, PowerShell je objektno orijentiran. Sve u PowerShellu je objekt, što znači da čak i varijable imaju proširena svojstva i funkcije . To je svojstvo zašto svoja pretraživanja možete postaviti na varijablu i na kraju dobiti niz rezultata.

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

U nekim jezicima obrada ovog niza bila bi višestupanjski proces. Prvo dobivanje duljine, a zatim odbrojavanje svakog koraka.



U PowerShell -u koračate kroz niz i radite na svakom od njih pomoću ForEach -a. Ovo vam štedi nekoliko redaka koda, što je korisno ako imate dulju skriptu. Na primjer, u nastavku je mala skripta koja bi koristila nekoliko Powershell ForEach petlji. On stvara ZIP arhivu svih vaših datoteka koje niste otvorili 30 dana.

Izgradnja sustava arhiviranja datoteka pomoću ForEach petlji

Prekinimo korake. Ti koristiš Get-ChildItem da biste dobili sve datoteke u mapi Dokumenti. Varijabla okruženja $ env: USERPROFILE pokreće skriptu koristeći trenutni profil. Ova je varijabla prenosivija od tvrdo kodirane staze. Rezultati tog pretraživanja dodjeljuju se varijabli $ MyDocs . Zatim stvaramo našu petlju ForEach tako da prolazi kroz svaku $ Doc u $ 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
}

Unutar petlje provjeravamo ima li svaka datoteka LastAccessTime nekretnina je starija od 30 dana. To dobivamo pomoću Get-Date cmdlet, a pomoću AddDays funkcija s negativnih trideset. Ako jest, dodajemo datoteku u $ myOldDocs nizu. Nakon što se sortiranje datoteka dovrši, tada uzimamo naš dovršeni niz i stvaramo zip datoteku. Ovaj proces je malo složeniji jer uključuje pozivanje na dio .NET -a. Ne brinite ako ga niste dobro shvatili - kôd možete ukrasti ovaj dokument pomoći za TechNet .

Za raščlanjivanje onoga što se ovdje događa: Premjestit ćemo sve naše stare datoteke u novi direktorij nazvan današnji datum na više od 30 dana. Nakon što se ta mapa izgradi, moramo stvoriti ZIP arhivu istog imena. Pokušat ćemo provjeriti je li arhiva uspjela i postoji li .ZIP datoteka, a zatim izbrisati novu mapu. Postavite ovo kao planirani zadatak koji će se izvoditi jednom mjesečno. Uštedjet ćete malo prostora i mapu Dokumenti održavati čistom.





While i Do While: Petlje pod uvjetom

Ako želite pokrenuti petlju samo kada je ispunjen određeni uvjet, koristite petlju While. Ako koristite varijablu za praćenje odbrojavanja, postavite je prvo.

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

Problem je u tome što ako ne koristite brojač, možda biste htjeli da se vaš kôd pokrene barem jednom, čak i ako je test istinit. To je slučaj s primjerom skripte u nastavku. Dakle, u tim slučajevima želite koristiti Do-While petlju. Sintaksa je nešto drugačija.

do{
Your Steps
}while(Conditional Statement)

Korištenje ovih programa programerima početnicima nije toliko očito. Radeći tipične svakodnevne skripte, možda nećete tako često nailaziti na njih. Ono što im posebno dobro dolazi je napraviti improvizirani mjerač vremena za provjeru uspješnosti procesa.

kako isključiti povezane rasprave na facebooku

Napravit ćemo brzu skriptu za ponovno pokretanje udaljenog računala i upozoriti ako se ne pojavi u roku od 15 minuta. Ovaj scenarij pretpostavlja da se radi o kućnom poslužitelju ili drugom stroju koji se ne pokreće često. Slobodno prilagodite vrijeme ako se vaše računalo obično pojavljuje brže.

Ponovno pokretanje i provjera: Korištenje Do-While petlje

Ova je skripta malo jednostavnija. Prvo, koristite Ponovno pokretanje računala naredba za ponovno pokretanje udaljenog računala. (Ovdje smo koristili lažni IP za naredbe za ponovno pokretanje, obavezno prepišite ovo DNS/IP računalom). Zatim stvorite varijablu brojača, i i postavite ga na 0. Zatim imate Do petlju s Start-Sleep-om koji zaustavlja skriptu na 300 sekundi (pet minuta). Druga naredba dodaje jednu brojaču.

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

Zatim imamo naše kriterije While. Koristimo Or test kako bismo osigurali da kvar generira upozorenje. Alternativa je skripta koja beskonačno čeka na udaljeni stroj. Za provjeru stroja koristimo Test-veza cmdlet. Radi jednostavnosti, ovo je Ping za PowerShell. Dodamo parametar -Miran što ga tjera da vrati vrijednost True ili False umjesto rezultata paketa. Drugi dio naredbe Or provjerava je li brojač veći od tri.

Nakon što se petlja dovrši, želimo stvoriti izlaz. To znači da moramo provjeriti naš brojač. Ovo je brza izjava if/else. Ako je veće od tri, skripta izlazi da udaljeni stroj ne reagira. Ako nije, to znači da je ponovno pokretanje uspješno.

Ostale petlje

U PowerShellu su dostupne još dvije vrste petlji. Donekle su povezani s prethodne dvije petlje, samo se ne koriste tako često. For petlja radi slično primjeru While. U ocjenjivanju ste postavili sve svoje kriterije, a zatim postavili cmdlete.

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

Petlje Do Do su poput petlji Do Dok, samo promijenite naredbu While u Do. U primjeru skripte to bi bilo isto što se tiče ponašanja. To je odabir stila, ali Do Do je svestraniji u drugim situacijama. Dakle, ako se sjetite samo jednog, Do While je korisniji.

PowerShell ima pomoć i za svaku od ovih petlji. Pomoć možete dobiti dodavanjem oko prije naziva petlje u Get-Help. Zatim možete vidjeti primjere i druge savjete za svaku vrstu. Ovo bi vam moglo biti od pomoći ako zaglavite.

Nastavljam rasti s vama

U ovom trenutku imate većinu vještina za početak izgradnje robusnih skripti. Bilo da automatizirate kućnu opremu ili štedite vrijeme na poslu, petlje pomažu vašim skriptama da učine više. Kombiniranje ovih petlji s rukovanjem pogreškama premješta vaše skriptiranje izvan osnova. Ovo otvara vrata naprednijim jezicima.

Što je pametna PowerShell skripta koju ste stvorili pomoću petlji? Podijelite ga s nama u komentarima.

Udio Udio Cvrkut E -pošta Izbrišite ove Windows datoteke i mape kako biste oslobodili prostor na disku

Trebate očistiti prostor na disku na računalu sa sustavom Windows? Evo Windows datoteka i mapa koje se mogu sigurno izbrisati kako bi se oslobodio prostor na disku.

Pročitajte Dalje
Povezane teme
  • Programiranje
  • PowerShell
  • Skriptiranje
O autoru Michael McConnell(44 objavljena članka)

Michael nije koristio Mac kad su bili osuđeni na propast, ali može kodirati u Applescriptu. Diplomirao je informatiku i engleski jezik; već neko vrijeme piše o Mac -u, iOS -u i videoigrama; i on je dnevni IT majmun više od desetljeća, specijaliziran za skriptiranje i virtualizaciju.

kako prenijeti glazbu sa starog iPod -a na računalo
Više od Michaela McConnella

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu