Publicitate

Un prim pas crucial programarea învățării funcționează cu bucle Bazele absolute ale programării pentru începători (partea 2)În partea a 2-a a ghidului nostru pentru începători absolut în programare, voi acoperi elementele de bază ale funcțiilor, valorile de retur, buclele și condiționările. Asigurați-vă că ați citit prima parte înainte de a aborda acest lucru, unde am explicat ... Citeste mai mult . Din fericire, PowerShell continuă să crească cu abilitățile tale.

Puteți încadra comenzile existente pe care le utilizați în fiecare zi în bucle pentru a economisi timp și efort. Scripturile dvs. fac ridicarea grea în timp ce faceți munca importantă pentru a citi mai multe articole pe MakeUseOf!

Bucle Powershell ForEach: Ușa pentru manipularea avansată a datelor

ForEach este aliasul ForEach-Object. (Un Alias ​​este doar o comandă rapidă pentru o comandă din PowerShell.) Acesta este un moment bun pentru a vorbi despre modul în care PowerShell gestionează datele.

Ca majoritatea limbajelor de programare moderne,

instagram viewer
PowerShell este orientat pe obiecte De unde a obținut numele programării „Orientate pe obiecte”?Orientat pe obiecte nu este doar un cuvânt cheie aleatoriu pe care îl auziți în cercurile de programare. Există un motiv în spatele numelui - dar ce? Alăturați-vă mie în timp ce explorez câteva dintre fundamentele conceptelor de programare și explic ... Citeste mai mult . Totul din PowerShell este un obiect, adică chiar variabile au proprietăți și funcții extinse Cmdlet-uri Powershell care vă vor îmbunătăți abilitățile de administrare WindowsPowershell este un instrument de linie de comandă și un limbaj de script. Îți oferă posibilitatea de a automatiza computerul prin aceleași comenzi pe care le folosești pentru a-l administra. Citeste mai mult . Această proprietate este motivul pentru care puteți seta căutările pe o variabilă și puteți încheia cu o serie de rezultate.

$ yourVar = Get-ChildItem * foreach ($ file în $ yourVar) {Pașii tăi. }

În unele limbi, procesarea acestui tablou ar fi un proces pe mai multe niveluri. Mai întâi, obținerea lungimii și apoi numărarea la fiecare pas.

În PowerShell, parcurgeți tabloul și efectuați acțiunea pe fiecare folosind ForEach. Acest lucru vă salvează mai multe linii de cod, care este util dacă aveți un script mai lung. De exemplu, următorul este un script mic care ar folosi câteva bucle Powershell ForEach. Creează o arhivă ZIP cu toate fișierele pe care nu le-ați deschis în 30 de zile.

Construirea unui sistem de arhivare de fișiere folosind bucle ForEach

Să dărâmăm pașii. Să utilizați Get-ChildItem pentru a obține toate fișierele din folderul Documente. Variabila de mediu Ce sunt variabilele de mediu și cum le pot folosi? [Windows]Din când în când voi învăța un mic sfat care mă face să mă gândesc „bine, dacă aș ști că acum un an, atunci m-ar fi salvat ore în șir”. Îmi amintesc viu că am învățat cum să ... Citeste mai mult $ env: USERPROFILE rulează scriptul folosind profilul curent. Această variabilă este mai portabilă decât o cale codată. Rezultatele căutării respective sunt atribuite variabilei $ MyDocs. Apoi, ne creăm bucla ForEach, făcând-o pas cu fiecare $ Doc în $ MyDocs.

$ oldDocs = @ () $ MyDocs = Get-ChildItem -Path "$ ($ env: USERPROFILE) \ Documente" -Recurse. foreach ($ doc în $ MyDocs) {if ($ doc. LastAccessTime -lt $ (data de obținere) .addDays (-30)) {$ oldDocs + = $ doc} } $ ArchiveFolder = New-Item-Path "$ ($ env: USERPROFILE) \ Documents \ $ ((Data de obținere -Format MMddyy) .toString ())" -ItemType Directory. foreach ($ doc în $ oldDocs) {Move-Item -Path $ doc. FullName -Destination "$ ($ ArchiveFolder. FULLNAME) \ $ ($ doc. Nume) "-Confirma $ false. } $ source = $ ArchiveFolder. Numele complet. $ destination = "$ ($ env: USERPROFILE) \ Documents \ $ ($ ArchiveFolder. Nume) .zip“ Add-Type -AssemblyName "system.io.compression.filesystem" [io.compression.zipfile]:: CreateFromDirectory (sursa $, $ destinație) if (test-path $ destination) {Remove-Item -Path $ ArchiveFolder -Recurse -Confirma $ false. }

În buclă, verificăm dacă există fiecare fișier LastAccessTime proprietatea este mai veche de 30 de zile. Obținem asta cu Get-Data cmdlet și folosind AddDays funcționează cu treizeci negativi. Dacă este, adăugăm fișierul în $ myOldDocs matrice. După ce s-a finalizat sortarea fișierului, vom lua matricea completată și vom crea un fișier zip. Acest proces este puțin mai complicat, deoarece implică invocarea unui pic de .NET. Nu vă faceți griji dacă nu îl înțelegeți destul, puteți să-i furați codul acest document de ajutor TechNet.

Pentru a descompune ceea ce se întâmplă aici: vom muta toate fișierele noastre vechi într-un nou director numit pentru data de astăzi cu mai mult de 30 de zile. Odată construit acel folder, trebuie să creăm arhiva ZIP cu același nume. Vom testa pentru a ne asigura că arhiva a reușit și că fișierul .ZIP este acolo, apoi ștergeți noul dosar. Setați acest lucru ca o sarcină programată pentru a rula o dată pe lună. Vă veți economisi puțin spațiu și vă veți păstra folderul Documente curate.

În timp ce și faceți în timp: bucle în stare

Dacă doriți să rulați o buclă numai atunci când o anumită condiție este îndeplinită, utilizați o buclă Ment. Dacă utilizați o variabilă pentru a urmări numărarea, setați prima.

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

Problema este că, dacă nu folosiți un contor, este posibil să doriți să vă rulați codul cel puțin o dată, chiar dacă testul este adevărat. Acesta este cazul scriptului de mai jos. Deci, în aceste cazuri, doriți să utilizați o buclă Do-while Cum funcționează buclele în programarea computeruluiBuclele sunt unul dintre primele tipuri de control pe care le veți învăța în programare. Probabil știți despre timp și pentru bucle, dar ce realizează o buclă de timp în timp? Citeste mai mult . Sintaxa este ușor diferită.

fă {Pașii tăi. } while (declaratie conditionata)

Folosirea acestora nu este la fel de evidentă pentru un programator începător. Efectuând scripturi obișnuite de zi cu zi, s-ar putea să nu te ocupi atât de des. Acolo unde vin mai ales la îndemână este să facă un cronometru improvizat pentru a testa succesul unui proces.

Vom crea un script rapid pentru a reporni o mașină de la distanță și pentru a alerta dacă nu va reveni în 15 minute. Acest scenariu presupune că este un server de origine sau un alt aparat care nu se repornește foarte des. Nu vă simțiți liber să reglați timpul dacă computerul dvs. crește mai repede.

Reporniți și verificați: folosind un buclă de timp în timp

Acest script este ceva mai simplu. În primul rând, utilizați Restart-calculator comanda de a reporni aparatul la distanță. (Am folosit aici o adresă IP falsă pentru comenzile de repornire, asigurați-vă că rescrieți acest lucru cu DNS / IP al computerului dvs.) Apoi creați variabila de contor, eu și setați-l la 0. În continuare, aveți bucla de Do cu Start-Sleep opriți scriptul timp de 300 de secunde (cinci minute). O a doua comandă adaugă una la contor.

Restart-Computer -ComputerName 127.0.0.1. i = 0. face {Start-Somn -Secunde 300 $ i + = 1. } while ((! (Test-Connection 127.0.0.1 -Quiet)) -sau $ i -gt 3) dacă ($ i-gt 3) {Write-Ouput "Mașina de la distanță nu răspunde, verificați." } else {Rezultatul scrierii "Reboot a reușit" }

Apoi avem criteriile noastre în timp ce. Folosim un test Or pentru a ne asigura că o defecțiune generează o alertă. Alternativa este script-ul care buclează la nesfârșit așteptarea mașinii de la distanță. Pentru a verifica dacă mașina este folosită Test de conexiune cmdlet. Pentru simplitate, aceasta este Ping pentru PowerShell. Adăugăm parametrul -Liniște ceea ce o obligă să întoarcă Adevărat sau Fals decât rezultatele pachetelor. A doua parte a instrucțiunii Or verifică dacă blatul este mai mult de trei.

După terminarea buclei, dorim să creăm ieșirea. Asta înseamnă că trebuie să ne verificăm ghișeul. Aceasta este o declarație rapidă dacă / altceva. Dacă este mai mare de trei, script-ul iese la care mașina de la distanță nu răspunde. Dacă nu, este rezultatul repornirii a avut succes.

Alte bucle

Există alte două tipuri de bucle disponibile în PowerShell. Sunt oarecum legate de cele două bucle anterioare, pur și simplu nu sunt la fel de frecvent utilizate. O buclă For funcționează similar cu exemplul Mentă. Vă setați toate criteriile în evaluare, apoi vă setați cmdleturile.

for ($ i = 0; $ i -lt 10; $ i ++) {Pașii tăi. }

Faceți până când buclele sunt ca buclele Do În timp ce, doar schimbați instrucțiunea Mentă în până. În scriptul de exemplu, ar fi același în ceea ce privește comportamentul. Este o alegere de stil, dar „Do while” este mai versatil în alte situații. Așadar, dacă îți amintești doar de unul, Fii în timp este mai util.

bucle de predicție de tip powerhell

PowerShell are ajutor și pentru fiecare din aceste bucle. Puteți obține ajutorul adăugând despre înainte de numele buclei în Get-Help. Puteți vedea apoi exemple și alte sfaturi pentru fiecare tip. Acestea ar trebui să fie de ajutor dacă vă blocați.

Continuând să crești cu tine

În acest moment, aveți cele mai multe abilități pentru a începe construirea de scripturi robuste. Dacă automatizarea instalației de acasă 15 Sarcini avansate PowerShell poate fi gestionat în Windows 10PowerShell este similar cu promptul de comandă, dar mai bine. Este un instrument puternic de administrare a sistemului. Am compilat 15 sarcini, unele simple, unele complexe, care beneficiază de magia PowerShell. Citeste mai mult sau economisind timp la locul de muncă, buclele vă ajută scripturile să facă mai mult. Combinând aceste bucle cu gestionarea erorilor vă mută scripturile dincolo de elementele de bază Gestionează erorile PowerShell precum un șef cu aceste sfaturiGestionarea erorilor PowerShell are patru părți. Aflați cum să remediați dacă există erori și mai mult în Microsoft PowerShell. Citeste mai mult . Acest lucru deschide ușa către limbi mai avansate.

Care este un script inteligent PowerShell pe care l-ați creat folosind bucle? Împărtășește-l cu noi în comentarii.

Michael nu a folosit un Mac atunci când erau condamnați, dar poate coda în Applescript. Are diplome în informatică și engleză; de ceva vreme scrie despre Mac, iOS și jocuri video; și este o maimuță IT de zi de peste un deceniu, specializată în scripturi și virtualizare.