PowerShell și tot ce trebuie să știi despre acest utilitar

Ce-ar fi dacă PC-ul tău ar putea gestiona sarcinile banale pentru tine? Cu Windows PowerShell, poate. Iată cum poți utiliza PowerShell pentru a automatiza sarcinile repetitive, de zi cu zi, pe care nimeni nu vrea să le facă iar și iar.

Cuprins

Ce este PowerShell?

Microsoft PowerShell este un utilitar de linie de comandă și un limbaj de scripting, un instrument puternic pentru administratori, care permite automatizarea unei game largi de sarcini pentru computere și rețele. PowerShell conține componente ale promptului de comandă și este construit pe .NET framework. Dacă citiți despre WebTech360, ar trebui să știți că PowerShell este instrumentul preferat de administratorii IT pentru gestionarea rețelelor mari.

Învățarea modului de utilizare a PowerShell va simplifica multe dintre sarcinile zilnice plictisitoare. De asemenea, puteți face modificări la nivel de sistem prin rețea, fără a fi nevoie să configurați individual fiecare server. PowerShell devine o parte esențială a rulării mediilor cloud hibride .

PowerShell are multe utilizări diferite pentru a vă ajuta să lucrați mai eficient și să mențineți rețeaua funcțională. Cele mai elementare utilizări includ: programarea actualizărilor zilnice ale sistemelor, generarea de rapoarte despre procesele curente, serviciile periodice și multe altele. Deși multe dintre aceste sarcini pot fi efectuate prin intermediul interfeței grafice, scopul PowerShell este de a le face mai rapid.

Dacă aveți o sarcină de întreținere de rutină a cărei configurare durează câteva minute, puteți scrie aceeași funcționalitate într-o singură comandă, numită PowerShell. Apoi, data viitoare când deschideți scriptul respectiv, acesta va rula în fundal. Stăpânirea logicii de scriptare PowerShell, înțelegerea modului în care funcționează obiectele, variabilele și implementarea inteligentă a acesteia în rețea vă vor face să vă întrebați de ce nu ați folosit PowerShell mai devreme.

Acest tutorial va acoperi elementele de bază ale PowerShell, care vor fi utile pentru cei noi în IT, mai ales dacă sunteți familiarizați cu Linia de comandă Windows. Va prezenta cum să utilizați instrumente și comenzi de bază, cum să lucrați cu fișiere și foldere, cum să înțelegeți obiectele, cum să utilizați variabile și cum să gestionați servere la distanță.

O scurtă istorie a utilitarelor din linia de comandă Windows

După lansarea Windows NT, CMD.EXE a devenit utilitarul de linie de comandă pentru Windows. Deși CMD.EXE a moștenit unele elemente de la predecesorul său DOS (COMMAN.COM), se baza totuși pe un limbaj de scripting destul de „primitiv”: folosea fișiere Windows Command (.CMD și .BAT). Adăugarea Windows Scripting Host și a limbajelor VBScript și JScript a îmbunătățit considerabil capacitățile de scripting ale utilitarului.

Aceste tehnologii reprezintă o combinație destul de echilibrată de utilitare avansate de linie de comandă și medii de scripting. Adevărata problemă nu este câte fișiere CMD.EXE, .CMD și Windows Scripting Host pot fi manipulate cu ajutorul lor. Principala nemulțumire și preocupare este îndeplinirea unor sarcini aparent simple.

Folosind un „framework” de instrumente de linie de comandă și de scripting, orice script moderat complex necesită o combinație de comenzi batch, Windows Scripting Host și executabile independente. Fiecare script folosește convenții diferite pentru execuție și solicitări, analiză și returnare a datelor.

Suportul slab pentru variabile în CMD.EXE, interfețele inconsistente și accesul limitat la setările Windows, combinate cu o altă slăbiciune, fac ca scriptarea în linia de comandă să fie dificil de implementat și utilizat. Ce este această „cealaltă slăbiciune”, v-ați putea întreba? Este text. În aceste tehnologii, totul este text. Rezultatul unei comenzi sau al unui script este text și trebuie analizat și reformatat pentru a acționa ca intrare pentru următoarea comandă. Acesta este punctul de plecare pe care PowerShell îl preia de la toate shell-urile tradiționale.

Introducerea instrumentelor, comenzilor și modulelor PowerShell

Cele trei concepte introduse în această secțiune reprezintă doar elementele de bază pentru a înțelege conceptele cheie care stau la baza PowerShell. Va trebui să petreceți mai mult timp învățând și stăpânind conceptele mai avansate pe măsură ce abordați comenzile PowerShell.

Instrumente PowerShell

PowerShell este instalat în mod implicit în Windows 10, Windows 7, Windows Server 2008 R2 și versiunile mai noi de Windows. Versiunile mai noi de PowerShell adaugă noi caracteristici și „cmdlet-uri” (termenul Microsoft pentru comenzile PowerShell - pronunțat „command-lets”) și sunt instalate odată cu versiunea corespunzătoare de Windows Management Framework (WMF).

În prezent, WMF 5.1 este cea mai recentă versiune recomandată. În unele cazuri, unele funcții noi depind de sistemul de operare, pe lângă versiunea WMF. De exemplu, Windows 8 și Windows Server 2012 acceptă cmdletul Test-NetConnection, care vă permite să testați conectivitatea la un anumit port TCP/IP , dar acest cmdlet nu este disponibil în Windows 7, chiar și atunci când rulați cea mai recentă versiune de WMF.

Pe majoritatea sistemelor Windows, utilizatorii vor avea la dispoziție două medii PowerShell, consola PowerShell și PowerShell ISE (Integrated Scripting Environment). Consola PowerShell apare ca o linie de comandă tradițională, dar cu funcționalitatea completă a PowerShell în spate. Numele variabilelor, buclele, completarea automată a comenzilor și configurarea de conducte sunt toate disponibile din consola PowerShell.

Pentru utilizări mai avansate (cum ar fi scriptarea), PowerShell ISE oferă completare automată a comenzilor, evidențierea codului și completarea codului Intellisense de la Microsoft pentru a vă ajuta să creați și să testați cod PowerShell. PowerShell ISE vă permite, de asemenea, să lucrați cu mai multe scripturi PowerShell simultan, utilizând navigarea cu file.

cmdlet-uri în PowerShell

Fundația comenzilor PowerShell este cmdletul. Microsoft a adoptat mai multe strategii de design atunci când a creat cmdleturi în PowerShell.

În primul rând, este vorba de capacitatea de a deduce cu ușurință numele cmdlet-urilor sau cel puțin de a le face mai ușor de descoperit. Comenzile sau cmdleturile PowerShell sunt, de asemenea, concepute pentru a fi mai ușor de utilizat, cu o sintaxă standardizată, facilitând crearea de scripturi din interfața liniei de comandă.

Cmdlet-urile utilizează formatul Verb-Substantiv, ca în Get-Service, Stop-Service sau Import-Csv. Partea verbală a numelui cmdlet-ului indică acțiunea efectuată asupra substantivului. De obicei, cmdlet-urile care sunt utilizate pentru a prelua informații vor avea verbul Get în nume, cum ar fi Get-Process sau Get-Content . Comenzile utilizate pentru a modifica ceva încep de obicei cu verbul Set , iar comenzile utilizate pentru a adăuga o entitate nouă la ceva încep de obicei cu Add sau New .

În al doilea rând, parametrii utilizați în mod obișnuit în PowerShell primesc și nume standardizate. De exemplu, parametrul -ComputerName permite executarea cmdletului pe unul sau mai multe computere la distanță. -Credential este utilizat pentru a furniza un obiect de autentificare, care conține acreditările utilizatorului, pentru a executa comanda ca un anumit utilizator.

Module în PowerShell

Puteți utiliza aliasuri atât pentru cmdlet-uri, cât și pentru parametri, pentru a economisi apăsări de taste și a scurta lungimea totală a comenzii (util atunci când se leagă mai multe comenzi în lanț). Deși aceste aliasuri nu utilizează întotdeauna convenții de denumire standard, ele reflectă în continuare utilitarele tradiționale din linia de comandă.

În PowerShell, aliasurile precum DIR, CD, DEL și CLS corespund cmdlet-urilor Get-ChildItem, Set-Location, Remove-Item și respectiv Clear-Host. Aliasurile de parametri pot funcționa în două moduri: pot utiliza un alias predefinit furnizat de cmdlet sau pot fi aliasate prin introducerea a suficiente caractere pentru a crea o potrivire unică între parametrii acceptați de cmdlet.

Gestionarea fișierelor și folderelor

Majoritatea administratorilor de sistem trebuie să manipuleze fișiere și foldere în cursul activității lor, fie că este vorba de mutarea unui folder într-o altă locație pe server, arhivarea fișierelor jurnal sau căutarea de fișiere mari. În cazurile în care aceleași operațiuni sunt repetate pe mai multe fișiere, utilizarea PowerShell pentru automatizarea acestora va fi o soluție eficientă de economisire a timpului.

Pentru a găsi fișiere și foldere, unul dintre primele instrumente din linia de comandă pe care un administrator le învăța în vremurile vechi ale informaticii era comanda dir. Dir va lista fișierele și folderele conținute în directorul specificat.

PowerShell are o comandă similară sub forma cmdletului Get-ChildItem . Get-ChildItem vă permite să construiți rapid o listă de fișiere dintr-un director, astfel încât să puteți manipula fișierele printr-o comandă pipe sau să atribuiți ieșirea unei variabile.

Get-ChildItem poate fi utilizat pur și simplu prin furnizarea unei căi, fie printr-o conductă, folosind parametrul -Path , fie direct după numele cmdlet-ului. Pentru a modifica răspunsul returnat de Get-ChildItem, este necesar să se ia în considerare anumiți parametri puși la dispoziție de cmdlet.

Parametrul -Filter este o modalitate prin care puteți căuta fișiere. În mod implicit, Get-ChildItem returnează doar copiii direcți ai directorului țintă. Această funcționalitate poate fi extinsă utilizând parametrul -Recurse , care caută recursiv directoarele conținute în directorul curent.

În PowerShell 4.0, Get-ChildItem a adăugat posibilitatea de a limita rezultatele la fișiere sau directoare utilizând comutatorul –File sau –Directory . Versiunile anterioare de PowerShell trebuiau să transmită rezultatele către Where-Object, filtrând după proprietatea PSIsContainer pentru a face această determinare. Un exemplu al ambelor tehnici utilizate pentru a returna directoarele conținute în C:Users este prezentat aici:

Get-ChildItem C:Users -Directory Get-ChildItem C:Users | Where-Object {$_.PSIsContainer –eq $true}

Pentru a detecta fișiere ascunse sau de sistem, trebuie utilizat  -Force . Get-ChildItem în PowerShell 4.0 și versiunile ulterioare poate fi, de asemenea, utilizat pentru a returna doar fișiere ascunse, doar în citire sau de sistem folosind -Hidden, -ReadOnly și, respectiv, –System . Funcționalități similare puteau fi obținute în versiunile anterioare prin filtrarea proprietății Mode folosind Where-Object:

Get-ChildItem C:Users | Where-Object {$_.Mode -like '*R*'}

Verificați dacă fișierul există

În mod normal, atunci când lucrăm cu fișiere, tot ce trebuie să știm este dacă fișierul există sau dacă calea directorului este validă. PowerShell oferă un cmdlet pentru a face acest lucru sub forma Test-Path, care returnează o valoare true sau false.

Test-Path este utilizat ca măsură de precauție înainte de a încerca să copiați sau să ștergeți un anumit fișier.

Copiați, mutați și ștergeți fișiere

Copy-Item: Copiază unul sau mai multe fișiere sau directoare dintr-o locație specificată de parametrul -Path în locația specificată de opțiunea -Destination.

Mutare element: Mută ​​un fișier sau un folder.

Când o structură de directoare este copiată sau mutată, ar trebui utilizată funcția -Recurse pentru ca cmdletul să efectueze acțiunea asupra directorului și a conținutului său. În unele cazuri, este necesară și funcția -Force , cum ar fi atunci când un fișier doar pentru citire este suprascris de o operațiune de copiere.

Eliminare element: Șterge fișier, folder.

Opțiunea -Force ar trebui utilizată atunci când întâlnești un fișier doar pentru citire, iar opțiunea -Recurse ar trebui utilizată la ștergerea unui director și a conținutului său.

Utilizarea PowerShell -WhatIf și -Confirm

Înainte de a efectua o ștergere masivă și serioasă, utilizați -WhatIf . -WhatIf vă permite să vedeți ce s-ar întâmpla dacă ați rula un script sau o comandă și dacă ar avea vreun impact negativ potențial prin ștergerea datelor importante ale afacerii. De asemenea, merită menționat faptul că -WhatIf nu se limitează la operațiunile cu fișierele, ci este utilizat pe scară largă în PowerShell.

Pentru scripturile pe care intenționați să le rulați manual sau, mai rău, care au comenzi dependente care rulează manual, luați în considerare utilizarea -Confirm . Aceasta vă permite să solicitați interacțiunea utilizatorului înainte ca operațiunea să aibă loc efectiv.

Scripturi PowerShell = Fișiere batch pe steroizi

PowerShell în sine este scris în limbajul .NET și se bazează în mare măsură pe .NET Framework. Ca atare, PowerShell este conceput ca un limbaj de scripting și shell orientat pe obiecte. Totul în PowerShell este tratat ca un obiect cu toate capacitățile .NET Framework. O comandă expune o colecție de obiecte care pot fi utilizate folosind proprietățile și metodele acelui tip de obiect. Când doriți să transmiteți ieșirea unei comenzi către alta, PowerShell transmite de fapt obiectul, nu doar ieșirea text a primei comenzi. Acest lucru oferă următoarei comenzi acces complet la toate proprietățile și metodele obiectului din canal.

Tratarea tuturor elementelor ca obiecte și posibilitatea de a accepta obiecte între comenzi reprezintă o schimbare majoră în teoria utilitarelor din linia de comandă. Acestea fiind spuse, PowerShell funcționează în continuare ca o shell tradițională. Comenzile, scripturile și executabilele pot fi tastate și rulate din linia de comandă, iar rezultatele sunt afișate ca text. Fișierele Windows .CMD și .BAT, VBScript-urile, JScript-urile și executabilele care rulează în CMD.EXE rulează în continuare în PowerShell. Cu toate acestea, deoarece nu sunt orientate pe obiecte, nu au acces complet la obiectele create și utilizate în PowerShell. Aceste scripturi și executabile moștenite vor trata în continuare totul ca text, dar puteți combina PowerShell cu o serie de alte tehnologii. Acest lucru este deosebit de important dacă doriți să începeți să utilizați PowerShell cu o colecție de scripturi existente pe care nu le puteți converti toate dintr-o dată.

Explicația parametrilor PowerShell

Cmdleturile pot accepta parametri pentru a le schimba comportamentul. Când rulați un cmdlet sau o funcție, puteți furniza valori ale parametrilor pentru a specifica ce, când, unde și cum se execută fiecare comandă PowerShell.

De exemplu, Get-Process va prelua și lista toate procesele care rulează în sistemul de operare:

PowerShell și tot ce trebuie să știi despre acest utilitar
Get-Process listează toate procesele care rulează.

Dar dacă vrei doar să obții un anumit proces? Poți face asta folosind parametri. De exemplu, pentru a obține toate procesele Slack, poți utiliza parametrul Name cu cmdletul Get-Process:

Get-Process -Name Slack

Atunci veți vedea doar procese numite „slack”:

PowerShell și tot ce trebuie să știi despre acest utilitar
Utilizarea Get-Process cu parametri

Sfat : Unii parametri sunt „poziționali”, ceea ce înseamnă că numele lor sunt opționale. În acest caz, Get-Process -Name Slack și Get-Process Slack îndeplinesc aceeași sarcină.

Fiecare cmdlet va accepta diferite tipuri de parametri. Folosește comanda Get-Help pentru a vedea parametrii acceptați ai cmdlet-ului în secțiunea SINTAXĂ.

Get-Help Get-Process

Veți vedea o listă cu toate modalitățile posibile prin care puteți rula cmdletul dat:

PowerShell și tot ce trebuie să știi despre acest utilitar
parametrii sintaxei cmdlet

În acest caz, cmdletul Get-Process acceptă parametri precum Name, Id, ComputerName, Module, FileVersionInfo și alți parametri comuni. Simbolurile de aici înseamnă:

Simbol

Nume

Sens

 

Tambur

Parametrul nu acceptă date de intrare

-

Cratimă

Specificați numele parametrului

<>

paranteze

Substitut pentru text

[]

Paranteze

Parametrul poate accepta una sau mai multe valori.

{}

paranteze

Parametrul acceptă un set de valori.

Parametrii acceptă un set de valori care vor indica tipul de date de care au nevoie, cum ar fi șir de caractere, număr întreg, număr boolean sau dată și oră. De exemplu, următoarea comandă:

Get-Process [[-Name] ]

... înseamnă că parametrul Name acceptă una sau mai multe valori de tip șir de caractere, în timp ce această comandă:

Get-Process -Id 

... înseamnă că parametrul Id acceptă una sau mai multe valori întregi.

Exemplul anterior Get-Process a folosit parametrul Name pentru a restrânge rezultatele. Totuși, dacă doriți să restrângeți rezultatele la un proces mai specific, puteți utiliza parametrul ID , care necesită un număr întreg, așa cum este indicat în sintaxa sa.

Get-Process -Id 3016

Atunci veți vedea un singur proces în listă:

PowerShell și tot ce trebuie să știi despre acest utilitar
Utilizarea parametrului Id pe cmdlet-uri

Creați o conductă

PowerShell procesează toate datele ca obiecte. Pentru a construi un script, aceste obiecte sunt rulate printr-o serie de cmdlet-uri sau funcții conectate folosind simbolul bară verticală (|). Alegerea cmdlet-urilor potrivite și conectarea lor într-o secvență logică folosind o conductă este importantă pentru un script eficient.

Să presupunem că creezi un script pentru a sorta și afișa cele 5 fișiere care ocupă cel mai mult spațiu într-un director. Există metode mai puternice de a scrie un script de sortare a fișierelor, dar aceasta este ușor de înțeles:

PowerShell și tot ce trebuie să știi despre acest utilitar
Script Sortare fișiere mari PS1

Pentru a face acest lucru în PowerShell, utilizați o conductă care arată astfel:

Get-ChildItem -Path "C:\Directory" -File | Sort-Object Length -Descending `
 | Select-Object -First 5 | Format-Table Name, Length -AutoSize

Salvați canalul ca script PS1

Acum că avem o conductă funcțională, o puteți salva ca fișier script PS1, astfel încât să nu fie nevoie să o importați de fiecare dată când o utilizați.

Cea mai simplă metodă de a crea un fișier PS1 este să lipiți scriptul în Notepad și să salvați fișierul cu extensia .ps1.

PowerShell și tot ce trebuie să știi despre acest utilitar
Creați un script cu Notepad

După ce ați creat fișierul PS1, îl puteți utiliza în PowerShell rulând comanda ./ScriptName.ps1 :

PowerShell și tot ce trebuie să știi despre acest utilitar
Folosind scriptul PS1

Sfat : Dacă primiți o eroare de permisiuni, cea mai rapidă soluție este să rulați PowerShell cu drepturi de administrator atunci când rulați scriptul.

Felicitări! Acum puteți crea scripturi PowerShell PS1.

Exemplu de script PowerShell

A citi despre și a înțelege cât de extraordinare sunt noile tehnologii este un lucru, dar a le folosi efectiv este cu totul altceva! În restul acestui articol, vom dezvolta un script PowerShell pentru a demonstra capacitățile sale și cum să îl folosim.

DIR este una dintre cele mai comune comenzi din CMD.EXE . Această comandă afișează toate fișierele și subdirectoarele conținute într-un director părinte (așa cum se arată în Figura 1). Împreună cu numele fiecărui obiect, informațiile furnizate includ data și ora ultimei actualizări și dimensiunea fiecărui fișier. DIR afișează, de asemenea, dimensiunea combinată a tuturor fișierelor din director, precum și numărul total de fișiere și subdirectoare.

PowerShell și tot ce trebuie să știi despre acest utilitar
Figura 1

Rularea comenzii DIR în PowerShell produce, de asemenea, o listă de directoare ca în Figura 2, dar într-un mod ușor diferit. PowerShell nu are o comandă DIR, ci are în schimb Get-ChildItem, care îndeplinește aceeași funcție. În PowerShell, DIR este un alias pentru Get-ChildItem. Nu intenționez să intru în detalii despre aliasuri în acest articol. Vă puteți gândi la DIR în PowerShell ca la o abreviere pentru Get-ChildItem.

DIR în PowerShell oferă multe dintre aceleași informații menționate mai sus: o listă de fișiere și foldere, data și ora ultimei modificări și dimensiunea fiecărui fișier. Cu toate acestea, îi lipsesc informațiile rezumative pe care le oferă DIR în CMD.EXE: dimensiunea totală a tuturor fișierelor din folder, numărul total de fișiere și numărul total de subfoldere.

PowerShell și tot ce trebuie să știi despre acest utilitar
Figura 2

Pentru scenariul exemplificat, va trebui să creați un script PowerShell care simulează comanda CMD.EXE DIR. Mai jos voi explica cele mai importante părți ale unui script.

DIR.PS1: Antet

Un script PowerShell constă din comenzi PowerShell într-un fișier text simplu cu extensia .PS1. În loc de DIR, ați utiliza un fișier text numit DIR.PS1.

Pentru a rula scriptul, tastați următoarea comandă în ecranul PowerShell:

.DIR.PS1 X:Folder

Unde X este litera partiției unității (cum ar fi C, D, E), iar Folder este numele folderului.

Dacă doriți să aflați informații despre partiția unei unități, va trebui să utilizați Windows Management Instrumentation (WMI). Detaliile despre WMI depășesc scopul acestui articol, așa că nu le vom detalia aici. Însă codul PowerShell de mai jos este suficient de ușor de înțeles fără a utiliza WMI. Puteți crea o variabilă „$filter” pe care să o utilizați cu comanda Get-WmiObject. Acest filtru îi spune comenzii Get-WmiObject că doriți doar informații despre o anumită unitate. Rezultatele comenzii Get-WmiObject sunt stocate într-o variabilă numită $volInfo. Rețineți că în PowerShell totul este un obiect; $volInfo este acum un obiect returnat de Get-WmiObject.

$filter = "DeviceID = '" + $drive + ":'"
$volInfo = Get-WmiObject -Class Win32_LogicalDisk -Filter $filter

Acum aveți acces la toate obiectele și metodele asociate cu obiectul. Numărul de serie al volumului este accesibil prin proprietatea VolumeSerialNumber. Numărul returnat este un șir de 8 caractere. Dar adesea doriți să îl formatați ca patru numere, separate printr-o cratimă. Se poate face similar ca în linia următoare. Cratima de la sfârșitul primei linii este caracterul de continuare a liniei în PowerShell. Practic, îi spune lui PowerShell că linia nu se întrerupe și că include linia următoare. Sfârșiturile de linie nu sunt necesare la scrierea codului, dar pentru a reduce lățimea și a face codul mai lizibil, ar trebui să faceți acest lucru.

$serial = $volInfo.VolumeSerialNumber.SubString(0, 4) + "-" + `
$volInfo.VolumeSerialNumber.SubString(4, 4)

Acum, că aveți un obiect $volInfo, puteți scrie informațiile din antetul DIR pe ecran. Dacă unitatea nu are nume, textul scris pe ecran va fi ușor diferit față de cazul în care unitatea are un nume. O simplă instrucțiune If-Else este utilizată pentru a verifica dacă proprietatea VolumeName este un șir gol. Instrucțiunea Write-Host este utilizată pentru a scrie fiecare linie de text pe ecran.

If ($volInfo.VolumeName -eq "") { Write-Host (" Volume in drive " + $drive + " has no label") } Else { Write-Host (" Volume in drive " + $drive + " is " + $volInfo.VolumeName) } Write-Host (" Volume Serial Number is " + $serial) Write-Host ("`n Directory of " + $args[0] + "`n")

Caracterul „`n” de la începutul și sfârșitul comenzii Write-Host este utilizat pentru a insera o linie nouă înainte și după text. Comanda Write-Host adaugă o linie nouă la sfârșitul fiecărei linii. Deci efectul lui „`n” este de a crea o linie goală înainte și după text.

Ați observat „-eq” în comanda If? Este un operator de comparație pentru egalități. Tabelul de mai jos vă prezintă toți operatorii de comparație:

-eq, -ieq Comparați după
-ne, -ine Comparația nu este egală
-gt, -igt Comparați mai mare decât
-ge, -ige Comparați mai mare sau egal cu
-lt, -ilt Comparați mai mic decât
-le, -ile Comparați mai mic sau egal cu

Caracterul -i dinaintea operatorilor de comparație indică faptul că operatorul nu ține cont de majuscule/minuscule.

PowerShell și tot ce trebuie să știi despre acest utilitar
Figura 3: Datele de ieșire ale scriptului pe care îl aveți în prezent

DIR.PS1: Listă de fișiere/foldere

Acum sunteți gata să afișați conținutul și proprietățile acestui folder. Primul lucru de făcut este să apelați comanda PowerShell Get-ChildItem pentru a obține o colecție de fișiere și a o transmite scriptului ca parametru. Comanda Get-ChildItem va obține o colecție de obiecte de fișiere și foldere, nu doar numele lor, ci va direcționa aceste obiecte direct către comanda Sort-Object pentru a le sorta. În mod implicit, comanda Sort-Object va sorta obiectele pe baza proprietății Name. Deci nu este nevoie să specificați alți parametri. Colecția sortată de obiecte va fi apoi stocată într-o variabilă numită $items.

$items = Get-ChildItem $args[0] | Sort-Object

După ce aveți o colecție de obiecte de fișiere și foldere, trebuie să le parcurgeți și să afișați proprietățile corespunzătoare. Comanda pentru aceasta este ForEach. Pentru fiecare fișier sau folder, proprietățile afișate vor fi data și ora ultimei modificări, numele, lungimea sau dimensiunea fișierului. Șirurile de caractere cu aspect ciudat din paranteze sunt coduri de format .NET. Acestea sunt folosite pentru alinierea stânga/dreapta câmpurilor și pentru formatarea datelor, orelor și numerelor. Înțelegerea acestor coduri de format șir de caractere nu este foarte importantă, deoarece nu sunt esențiale pentru natura acestui script.

Instrucțiunea If este cea în care se determină dacă un obiect este sau nu un director. Dacă primul caracter al atributului Mode este „d”, obiectul este un director. Trebuie să verificați de două ori, deoarece codul pentru directoare este adesea diferit de codul pentru fișiere.

Observați linia $totalDirs++ din interiorul instrucțiunii If. Acesta este un contor responsabil pentru urmărirea numărului de directoare. În mod similar, există o variabilă $totalFiles care este utilizată pentru a urmări dimensiunea totală a tuturor fișierelor. Aceste valori sunt întotdeauna calculate în timpul execuției. Dar sunt afișate doar după finalizarea procesului de listare a fișierelor.

ForEach ($i In $items)
{
$date = "{0, -20:MM/dd/yyyy hh:mm tt}" -f $i.LastWriteTime
$file = $i.Name
If ($i.Mode.SubString(0, 1) -eq "d")
{
$totalDirs++
$list = $date + " {0, -15}" -f "
" + " " + $file
}
Else
{
$totalFiles++
$size = "{0, 18:N0}" -f $i.Length
$list = $date + $size + " " + $file
}
$totalSize += $i.Length
Write-Host $list
}

PowerShell și tot ce trebuie să știi despre acest utilitar
Figura 4: Afișează datele de ieșire ale scriptului actualizat.

DIR.PS1: Subsol

Singurul lucru care rămâne de făcut este să scrieți pe ecran numărul total de fișiere, directoare, dimensiunea totală a tuturor fișierelor și spațiul liber de pe această partiție de unitate. Pentru a face acest lucru, va trebui să utilizați variabilele contor ($totalFiles, $totalDirs, $totalSize) create în secțiunea anterioară. Puteți afla cantitatea de spațiu liber din variabila $volInfo creată la începutul scriptului.

Write-Host ("{0, 16:N0}" -f $totalFiles + " File(s)" + `
"{0, 15:N0}" -f $totalSize + " bytes")
Write-Host ("{0, 16:N0}" -f $totalDirs + " Dir(s)" + `
"{0, 16:N0}" -f $volInfo.FreeSpace + " bytes free`n")

PowerShell și tot ce trebuie să știi despre acest utilitar
Figura 5: Afișează datele complete de ieșire ale scriptului.

Previziunile și îmbunătățirile pot fi

Deși scriptul pe care îl creați produce o ieșire aproape identică cu comanda CMD.EXE DIR, există câteva avertismente de care ar trebui să fiți conștienți și câteva îmbunătățiri care pot fi făcute.

  • Acest script nu efectuează nicio verificare a erorilor.
  • Dacă nu se transmite o cale validă scriptului, acesta va eșua și va afișa un mesaj de eroare PowerShell.
  • Numărul total de directoare dat în script este cu 2 mai mic decât rezultatul comenzii CMD.EXE DIR, deoarece comanda Get-ChildItem nu ia în considerare cele două directoare „.” și „..” ca în CMD.EXE.
  • Scriptul tău sortează doar după numele fișierului, numele folderului și nu oferă nicio altă sortare după atribute.
  • Scriptul tău nu poate afișa conținutul folderului și al tuturor subfolderelor.

Cum te ajută PowerShell să automatizezi orice pe PC-ul tău

Scrieți scripturi PowerShell simple

Puteți utiliza PowerShell pentru a automatiza aproape orice, cum ar fi redenumirea fișierelor în lot pentru consecvență sau lansarea automată a aplicațiilor. Să scriem câteva scripturi Windows PowerShell simple pentru a vedea cum funcționează.

Notă : Dacă întâmpinați o eroare la executarea scriptului referitoare la politica de execuție, este posibil să fie nevoie să permiteți temporar execuția scriptului executând „Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass”.

Redenumirea în lot a fișierelor dintr-un folder

Puteți utiliza PowerShell pentru a copia, muta și șterge fișiere de pe PC. De asemenea, puteți redenumi fișiere de un anumit tip în bloc. De exemplu, iată cum puteți redenumi mai multe fișiere text înlocuind prefixul „oldco” cu „newco” în numele fișierelor lor:

Get-ChildItem -Path "C:\CompanyFiles" -Filter "*.txt" | Rename-Item -NewName {$_.Name -replace "oldco","newco"}

În scriptul de mai sus, „.txt” este filtrul pentru extensia de fișier. Îl puteți modifica și seta la .jpg, .docx etc. pentru a căuta diferite tipuri de fișiere.

Lansare automată a aplicației

Dacă deschizi același set de aplicații în fiecare zi, poți scrie un script PowerShell pentru a le lansa cu un singur clic:

#Open multiple apps with a single click
Start-Process "notepad.exe"
Start-Process "calc.exe"
Start-Process "Chrome.exe"
Start-Process "slack.exe"

Lipiți scriptul într-un fișier Notepad și salvați-l ca LaunchFavoriteApps.ps1. Apoi, faceți dublu clic pe fișier pentru a lansa toate aplicațiile listate în script.

Copiați fișierele importante într-o locație de rezervă

Puteți face periodic copii de rezervă ale fișierelor importante într-o locație de rezervă utilizând următorul script. Asigurați-vă că modificați căile sursă și destinație după cum este necesar:

#Copy MyFiles folder contents to MyFilesBackup in D:\
Copy-Item -Path "C:\Documents\MyFiles" -Destination "D:\MyFilesBackup" -Recurse

Scrieți un script PowerShell pentru a organiza automat fișierele zilnic

Deoarece multe tipuri de fișiere sunt descărcate zilnic, folderul Descărcări se poate aglomera rapid cu tot felul de fișiere împrăștiate. Pentru a remedia acest lucru, putem scrie un script PowerShell care sortează fișierele descărcate în foldere după tipul de fișier la sfârșitul fiecărei zile.

Deschideți un fișier Notepad nou și lipiți următorul script. Asigurați-vă că modificați calea folderului sursă din script pentru a se potrivi cu calea folderului Descărcări:

# Change the source folder path below
$sourcePath = "E:\Downloads"
# Add file mapping folder names; the Others folder includes all the files that do not match file types in the other categories
$fileTypes = @{
"Documents" = @("*.docx", "*.pdf", "*.txt")
"Images" = @("*.jpg", "*.png", "*.gif")
"Media" = @("*.mp4", "*.mp3", "*.mov")
"Zip" = @("*.zip", "*.rar")
"ISO" = @("*.iso")
"Others" = @("*")
}
# Iterate through each folder type and prepare a destination folder for organizing files
foreach ($folder in $fileTypes.Keys) {
# Create the destination folder path
$destPath = Join-Path -Path $sourcePath -ChildPath $folder
# Check if the destination folder exists, and create it if it doesn't
if (!(Test-Path -Path $destPath)) {
New-Item -ItemType Directory -Path $destPath | Out-Null
}
# Move matching files from the source folder to the destination folder based on file type patterns
foreach ($pattern in $fileTypes[$folder]) {
Get-ChildItem -Path $sourcePath -Filter $pattern -File -ErrorAction SilentlyContinue | ForEach-Object {
try {
Move-Item -Path $_.FullName -Destination $destPath -Force -ErrorAction Stop
Write-Output "Moved: $($_.FullName) to $destPath"
} catch {
Write-Warning "Failed to move file: $($_.FullName). Error: $_"
}
}
}
}
Write-Output "Files organized successfully!"

Pentru a salva fișierul, faceți clic pe Fișier > Salvare ca și introduceți OrganizeDownloadsFolder.ps1 ca nume de fișier. Apoi, faceți clic pe Salvare ca tip și selectați Toate fișierele . Faceți dublu clic pe fișierul OrganizeDownloadsFolder.ps1 pentru a rula scriptul.

Planificați și executați sarcini

Desigur, scrierea unui script este o parte a procesului de automatizare. A doua parte este asigurarea că scriptul poate fi executat automat pentru a îndeplini sarcina. Pentru a face acest lucru, putem crea sarcini programate pentru a rula scriptul zilnic sau după cum este necesar.

Deschideți PowerShell, apoi copiați și lipiți următorul script și apăsați Enter . Asigurați-vă că înlocuiți „J:\OrganizeDownloadsFolder.ps1” cu calea completă către scriptul OrganizeDownloadsFolder.ps1 .

$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File 'J:\OrganizeDownloadsFolder.ps1'"
$trigger = New-ScheduledTaskTrigger -Daily -At "5:00 PM"
Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "OrganizeDownloadsFolderDaily"

După ce ați terminat, apăsați Enter . Scriptul va crea o sarcină programată în Task Scheduler pentru a rula scriptul de organizare a fișierelor în fiecare zi la ora 17:00. Dacă preferați o altă oră, o puteți modifica în scriptul de mai sus.

În plus, puteți utiliza PowerShell pentru a automatiza alte sarcini zilnice, cum ar fi un script de monitorizare a spațiului care vă avertizează atunci când rămâneți fără spațiu liber pe unitatea principală, protejarea prin parolă a loturilor de documente PDF și chiar aplicarea de imagini de fundal live din folderul de imagini.

Deși PowerShell este un utilitar și un limbaj de scripting puternic, este nevoie de puțin timp pentru a-l înțelege și utiliza, mai ales dacă nu sunteți familiarizat cu mediul .NET Framework. Sper că acest articol și scriptul exemplu vor fi utile oricui dorește să înțeleagă PowerShell. Însă scriptul exemplu creat în articol este destul de simplu. Cred că poate fi construit și dezvoltat mai complet pentru a servi aplicații mai complexe.

Tags: #System
Sign up and earn $1000 a day ⋙

Leave a Comment

6 moduri de a deschide proprietățile computerului/sistemului în Windows 10

6 moduri de a deschide proprietățile computerului/sistemului în Windows 10

Puteți utiliza una dintre următoarele 6 metode pentru a deschide Proprietăți computer (sau Proprietăți sistem) în Windows 10.

Cum să blochezi rețeaua Wi-Fi pentru oaspeți, astfel încât nimeni să nu poată spiona

Cum să blochezi rețeaua Wi-Fi pentru oaspeți, astfel încât nimeni să nu poată spiona

Dacă blochezi corect rețeaua Wi-Fi pentru oaspeți, poți partaja conexiunea la internet cu orice vizitatori fără a partaja alte informații.

3 moduri de a dezactiva paravanul de protecție din Windows 11

3 moduri de a dezactiva paravanul de protecție din Windows 11

În acest articol, WebTech360 vă va ghida cum să dezactivați firewall-ul pe Windows 11.

Micile modificări ajută la accelerarea semnificativă a computerelor cu Windows lente

Micile modificări ajută la accelerarea semnificativă a computerelor cu Windows lente

Când ți-ai cumpărat calculatorul, acesta pornea în câteva secunde și funcționa de minune. Dar lucrurile s-au schimbat în timp.

Cum să remediați fișierele temporare care ocupă mult spațiu pe computer

Cum să remediați fișierele temporare care ocupă mult spațiu pe computer

Acest document este despre ștergerea fișierelor .tmp, nu despre cum să ștergeți istoricul de internet sau memoria cache a browserului.

Cum să dezactivezi aplicațiile din fundal în Windows 11 și să reduci consumul de RAM în Windows 11

Cum să dezactivezi aplicațiile din fundal în Windows 11 și să reduci consumul de RAM în Windows 11

Poți dezactiva aplicațiile din fundal din Windows 11 pentru a optimiza performanța, a economisi bateria și a reduce consumul de RAM.

Cum se instalează și se utilizează VPN pe Windows 11

Cum se instalează și se utilizează VPN pe Windows 11

Instalarea unui VPN vă va ajuta să vă mențineți computerul cu Windows 11 mai sigur.

8 scurtături de accesibilitate Windows care deblochează noi opțiuni pentru toată lumea

8 scurtături de accesibilitate Windows care deblochează noi opțiuni pentru toată lumea

Windows oferă o serie de opțiuni utile de accesibilitate, ideale pentru personalizarea interfeței PC-ului, îmbunătățirea confortului și chiar operarea complet hands-free.

12 moduri de a accesa rapid Setările în Windows 10

12 moduri de a accesa rapid Setările în Windows 10

Pe Windows 10, Microsoft a integrat o nouă aplicație numită Setări. Această aplicație Setări este o aplicație Metro creată de Microsoft pentru a înlocui aplicația clasică Panou de control.

Utilizarea CMD pentru a șterge foldere mari pe Windows

Utilizarea CMD pentru a șterge foldere mari pe Windows

Folderele mari din sistem sunt unul dintre vinovații care ocupă mult spațiu în sistem. Multe foldere pe care le creați, după ce le ștergeți, vor reapărea după un timp. Poate că acestea sunt foldere nedorite pe care încercați să le eliminați.

Cum se schimbă serverul DNS pe Windows 11

Cum se schimbă serverul DNS pe Windows 11

Dacă serverul DNS implicit furnizat de furnizorul dvs. de servicii de internet pare lent, nesigur sau nesigur, nu trebuie să îl utilizați. Iată cum puteți modifica setările serverului DNS pe computerul dvs. cu Windows 11.

Activați GodMode pe Windows 10, 8 și 7

Activați GodMode pe Windows 10, 8 și 7

GodeMode se numește Shortcut Windows Master Control Panel. GodMode (sau God Mode) este un panou de control care vă permite să configurați și să accesați tot ce se află în sistemul de operare Windows.

Adrese populare de conectare la modem TP Link

Adrese populare de conectare la modem TP Link

Pentru a schimba parola sau numele WiFi pentru modemul TP Link, utilizatorii trebuie să se conecteze la adresa corespunzătoare acestei linii de modem. Deci, care este adresa de conectare a modemului TP Link?

Cum se intră în BIOS (UEFI) pe Windows 10, cum se remediază eroarea de imposibilitate de a intra în BIOS pe Windows 10

Cum se intră în BIOS (UEFI) pe Windows 10, cum se remediază eroarea de imposibilitate de a intra în BIOS pe Windows 10

Instrucțiuni despre cum să accesezi BIOS-ul pe Windows 10, cu ilustrații video.

Cum se activează căutarea fișierelor în cloud pe Windows 11

Cum se activează căutarea fișierelor în cloud pe Windows 11

Căutarea în Windows 11 extrage rezultate nu numai din fișierele și aplicațiile de pe computer, ci și din spațiul de stocare în cloud conectat la contul Microsoft.

6 moduri de a deschide proprietățile computerului/sistemului în Windows 10

6 moduri de a deschide proprietățile computerului/sistemului în Windows 10

Puteți utiliza una dintre următoarele 6 metode pentru a deschide Proprietăți computer (sau Proprietăți sistem) în Windows 10.

Cum să blochezi rețeaua Wi-Fi pentru oaspeți, astfel încât nimeni să nu poată spiona

Cum să blochezi rețeaua Wi-Fi pentru oaspeți, astfel încât nimeni să nu poată spiona

Dacă blochezi corect rețeaua Wi-Fi pentru oaspeți, poți partaja conexiunea la internet cu orice vizitatori fără a partaja alte informații.

3 moduri de a dezactiva paravanul de protecție din Windows 11

3 moduri de a dezactiva paravanul de protecție din Windows 11

În acest articol, WebTech360 vă va ghida cum să dezactivați firewall-ul pe Windows 11.

Micile modificări ajută la accelerarea semnificativă a computerelor cu Windows lente

Micile modificări ajută la accelerarea semnificativă a computerelor cu Windows lente

Când ți-ai cumpărat calculatorul, acesta pornea în câteva secunde și funcționa de minune. Dar lucrurile s-au schimbat în timp.

Cum să remediați fișierele temporare care ocupă mult spațiu pe computer

Cum să remediați fișierele temporare care ocupă mult spațiu pe computer

Acest document este despre ștergerea fișierelor .tmp, nu despre cum să ștergeți istoricul de internet sau memoria cache a browserului.

Cum să dezactivezi aplicațiile din fundal în Windows 11 și să reduci consumul de RAM în Windows 11

Cum să dezactivezi aplicațiile din fundal în Windows 11 și să reduci consumul de RAM în Windows 11

Poți dezactiva aplicațiile din fundal din Windows 11 pentru a optimiza performanța, a economisi bateria și a reduce consumul de RAM.

Cum se instalează și se utilizează VPN pe Windows 11

Cum se instalează și se utilizează VPN pe Windows 11

Instalarea unui VPN vă va ajuta să vă mențineți computerul cu Windows 11 mai sigur.

8 scurtături de accesibilitate Windows care deblochează noi opțiuni pentru toată lumea

8 scurtături de accesibilitate Windows care deblochează noi opțiuni pentru toată lumea

Windows oferă o serie de opțiuni utile de accesibilitate, ideale pentru personalizarea interfeței PC-ului, îmbunătățirea confortului și chiar operarea complet hands-free.

12 moduri de a accesa rapid Setările în Windows 10

12 moduri de a accesa rapid Setările în Windows 10

Pe Windows 10, Microsoft a integrat o nouă aplicație numită Setări. Această aplicație Setări este o aplicație Metro creată de Microsoft pentru a înlocui aplicația clasică Panou de control.

Utilizarea CMD pentru a șterge foldere mari pe Windows

Utilizarea CMD pentru a șterge foldere mari pe Windows

Folderele mari din sistem sunt unul dintre vinovații care ocupă mult spațiu în sistem. Multe foldere pe care le creați, după ce le ștergeți, vor reapărea după un timp. Poate că acestea sunt foldere nedorite pe care încercați să le eliminați.

Cum se schimbă serverul DNS pe Windows 11

Cum se schimbă serverul DNS pe Windows 11

Dacă serverul DNS implicit furnizat de furnizorul dvs. de servicii de internet pare lent, nesigur sau nesigur, nu trebuie să îl utilizați. Iată cum puteți modifica setările serverului DNS pe computerul dvs. cu Windows 11.

Activați GodMode pe Windows 10, 8 și 7

Activați GodMode pe Windows 10, 8 și 7

GodeMode se numește Shortcut Windows Master Control Panel. GodMode (sau God Mode) este un panou de control care vă permite să configurați și să accesați tot ce se află în sistemul de operare Windows.

Adrese populare de conectare la modem TP Link

Adrese populare de conectare la modem TP Link

Pentru a schimba parola sau numele WiFi pentru modemul TP Link, utilizatorii trebuie să se conecteze la adresa corespunzătoare acestei linii de modem. Deci, care este adresa de conectare a modemului TP Link?

Cum se intră în BIOS (UEFI) pe Windows 10, cum se remediază eroarea de imposibilitate de a intra în BIOS pe Windows 10

Cum se intră în BIOS (UEFI) pe Windows 10, cum se remediază eroarea de imposibilitate de a intra în BIOS pe Windows 10

Instrucțiuni despre cum să accesezi BIOS-ul pe Windows 10, cu ilustrații video.

Cum se activează căutarea fișierelor în cloud pe Windows 11

Cum se activează căutarea fișierelor în cloud pe Windows 11

Căutarea în Windows 11 extrage rezultate nu numai din fișierele și aplicațiile de pe computer, ci și din spațiul de stocare în cloud conectat la contul Microsoft.