PowerShell și tot ce trebuie să știți despre acest utilitar

Ce se întâmplă dacă computerul tău ar putea face față sarcinilor plictisitoare pentru tine? Cu Windows PowerShell, acest lucru este posibil. Iată cum să utilizați PowerShell pentru a automatiza sarcini zilnice repetitive pe care nimeni nu dorește să le facă din nou și din nou.

Cuprins

Ce este PowerShell?

Microsoft PowerShell este un utilitar de linie de comandă și un limbaj de scriptare care este un instrument puternic pentru administratori, permițându-vă să automatizați o gamă largă de sarcini pentru computere și rețele. PowerShell conține componente ale promptului de comandă și este construit pe framework-ul .NET. Dacă citiți despre WebTech360, atunci trebuie să știți că PowerShell este instrumentul ales pentru administratorii IT pentru a gestiona rețele mari.

Învățarea cum să utilizați PowerShell va simplifica multe sarcini de zi cu zi plictisitoare. De asemenea, puteți face modificări la nivelul întregului sistem prin intermediul rețelei, fără a fi nevoie să ajustați individual fiecare server. PowerShell devine o parte esențială a rulării mediilor hibride cloud .

PowerShell are multe utilizări diferite pentru a vă ajuta să lucrați mai eficient și să vă mențineți rețeaua să funcționeze eficient. Cele mai de bază utilizări includ: programarea actualizărilor zilnice ale sistemelor, generarea de rapoarte pentru procesele curente, servicii periodice și multe altele. Este adevărat că multe dintre aceste sarcini pot fi realizate prin GUI, dar scopul PowerShell este să le facă mai rapid.

Dacă aveți o sarcină de întreținere obișnuită, care durează câteva minute pentru a fi configurată, puteți scrie aceeași funcționalitate într-o singură comandă, numită PowerShell. Deci data viitoare când deschideți acel script și va rula în fundal. Stăpânirea logicii de scripting PowerShell, înțelegerea modului în care funcționează obiectele, var (variabilele) și implementarea în mod inteligent în rețeaua dvs. vă va face să vă întrebați de ce nu ați folosit PowerShell mai devreme.

Acest tutorial va acoperi elementele de bază ale PowerShell, ceea ce va fi util pentru cei nou în IT, mai ales dacă sunteți familiarizat cu Windows Command Prompt. Articolul va prezenta cum să utilizați instrumentele și comenzile de bază, cum să manipulați fișierele și folderele, cum să înțelegeți obiectele, să folosiți variabile și să gestionați servere la distanță.

Un scurt istoric al utilităților 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 componente de la predecesorul său DOS (COMMAN.COM), a fost încă bazat pe un limbaj de scripting destul de „primitiv”: utilizarea fișierelor Windows Command (.CMD și .BAT). Adăugarea Windows Scripting Host și a limbajelor VBScript și JScript a îmbunătățit considerabil capacitățile de scriptare ale utilitarului.

Aceste tehnologii sunt o combinație bine echilibrată de utilități avansate de linie de comandă și medii de scripting. De fapt, problema cât de multe fișiere CMD.EXE, .CMD și Windows Scripting Host pot fi manipulate nu este problema reală. Ceea ce oamenii se plâng și se îngrijorează cel mai mult este îndeplinirea unor sarcini aparent simple.

Folosind „cadru” de linie de comandă și instrumente de scripting, orice script moderat cuprinzător necesită o combinație de comenzi în lot, Windows Scripting Host și executabile autonome. Fiecare script folosește convenții diferite pentru executarea și solicitarea, analizarea și returnarea 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 scripturile în linia de comandă mai dificil de implementat și utilizat. S-ar putea să vă întrebați care este „cealaltă slăbiciune” aici? Vă rugăm să rețineți că este text simplu. În aceste tehnologii, totul este sub formă de text. Ieșirea unei comenzi sau a unui script este text și trebuie analizată și reformatată pentru a acționa ca intrare pentru următoarea comandă. Acesta este punctul de plecare de bază pe care PowerShell îl ia din toate shell-urile tradiționale.

Vă prezentăm instrumentele, comenzile și modulele PowerShell

Cele trei concepte introduse în această secțiune sunt doar elementele de bază pentru înțelegerea conceptelor cheie care formează baza PowerShell. Va trebui să petreceți mai mult timp învățând și stăpânind concepte mai avansate atunci când abordați comenzile PowerShell.

Instrumente PowerShell

PowerShell este instalat implicit în Windows 10, Windows 7, Windows Server 2008 R2 și versiuni mai noi de Windows. Noile versiuni de PowerShell adaugă noi funcții și „cmdlet-uri” (termenul Microsoft pentru comenzile PowerShell - pronunțat „command-lets”) și sunt instalate cu versiunea corespunzătoare a 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 în plus față de 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 canalizarea sunt disponibile din consola PowerShell.

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

cmdleturi în PowerShell

Fundamentul comenzilor PowerShell este cmdletul. Microsoft a luat mai multe strategii de proiectare atunci când a creat cmdlet-uri în PowerShell.

Prima este 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 sintaxă standardizată, ceea ce facilitează crearea de scripturi din interfața liniei de comandă.

Cmdleturile folosesc formatul Verb-Substantiv ca în Get-Service, Stop-Service sau Import-Csv. Partea verbală a numelui unui cmdlet indică acțiunea efectuată asupra substantivului. De obicei, cmdleturile folosite pentru a prelua informații vor avea verbul Get în numele lor, cum ar fi Get-Process sau Get-Content . Comanda folosită pentru a edita ceva începe de obicei cu verbul Set , pentru a adăuga o nouă entitate undeva începe de obicei cu Add sau New .

În al doilea rând, parametrilor utilizați în mod obișnuit în PowerShell primesc și nume standardizate. De exemplu, parametrul -ComputerName permite ca cmdletul să fie executat pe unul sau mai multe computere la distanță. -Credential este folosit pentru a furniza un obiect de autentificare, care conține acreditări de utilizator, pentru a rula o comandă ca un anumit utilizator.

Module în PowerShell

Puteți folosi aliasuri atât pentru cmdleturi, cât și pentru parametri pentru a salva apăsările de taste, scurtând lungimea totală a comenzii (foarte util atunci când înlănțuiți mai multe comenzi împreună). Deși aceste aliasuri nu folosesc întotdeauna convențiile standard de denumire, ele reflectă totuși utilitarele tradiționale ale liniei de comandă.

În PowerShell, aliasuri 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 folosi un alias predefinit furnizat de cmdlet sau pot fi alias prin introducerea de 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șierele și folderele în timpul activității lor, fie că este vorba despre mutarea unui folder în altă locație de pe server, arhivarea fișierelor jurnal sau căutarea fișierelor mari. În cazul în care aceleași operațiuni sunt repetate pe mai multe fișiere, utilizarea PowerShell pentru a le automatiza va fi o soluție eficientă de economisire a timpului.

Pentru a găsi fișiere și directoare, unul dintre primele instrumente de linie de comandă pe care un administrator le-ar învăța în vechile zile ale computerului era comanda dir. Dir va lista fișierele și directoarele conținute în directorul specificat.

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

Get-ChildItem poate fi folosit pur și simplu prin furnizarea unei căi, fie prin conductă, folosind parametrul -Path , fie imediat după numele cmdlet-ului. Pentru a ajusta răspunsul returnat de Get-ChildItem, este necesar să luați în considerare câțiva parametri disponibili de cmdlet.

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

În PowerShell 4.0, Get-ChildItem a adăugat capacitatea de a limita rezultatele la fișiere sau directoare folosind comutatorul –File sau –Directory . Versiunile anterioare de PowerShell au trebuit să treacă rezultatul către Where-Object, filtrul pe proprietatea PSIContainer pentru a face această determinare. Un exemplu al ambelor tehnici utilizate pentru a returna folderele conținute în C:Utilizatori este prezentat aici:

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

Pentru a detecta fișierele ascunse sau de sistem, trebuie utilizat  -Force . Get-ChildItem din PowerShell 4.0 și versiunile ulterioare poate fi folosit și pentru a returna numai fișiere ascunse, numai pentru citire sau de sistem folosind -Hidden, -ReadOnly și, respectiv, -System . Funcționalități similare ar putea 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 formă de Test-Path, care returnează o valoare adevărată sau falsă.

Calea de testare este folosită ca pas 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.

Move-Item: Mută ​​un fișier sau dosar.

Când structurile de directoare sunt copiate sau mutate, -Recurse ar trebui să fie folosit pentru ca cmdlet-ul să efectueze acțiunea asupra directorului și a conținutului acestuia. În unele cazuri, este nevoie de -Force , cum ar fi atunci când un fișier numai în citire este suprascris printr-o operație de copiere.

Remove-Item: Ștergeți fișierul, folderul.

Switch -Force ar trebui să fie folosit când întâlnești un fișier numai în citire și -Recurse ar trebui să fie folosit când ștergeți un director și conținutul acestuia.

Folosind PowerShell -WhatIf și -Confirm

Înainte de a face orice ștergere serioasă, în masă, utilizați -WhatIf . -WhatIf vă permite să vedeți ce s-ar întâmpla dacă se rulează un script sau o comandă, ar avea un potențial impact negativ al ștergerii datelor importante de afaceri. De asemenea, merită remarcat faptul că -WhatIf nu se limitează la operațiuni cu fișiere, este utilizat pe scară largă în PowerShell.

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

Scripturi PowerShell = Fișiere lot pe steroizi

PowerShell în sine este scris în limbajul .NET și se bazează în mare măsură pe .NET Framework. De aceea, PowerShell a fost conceput ca un utilitar orientat pe obiecte și un limbaj de scripting. Totul din PowerShell este tratat ca un obiect .NET Framework complet funcțional. O comandă care oferă un set de obiecte care pot fi utilizate folosind proprietățile și metodele acelui tip de obiect. Când doriți să transferați ieșirea unei comenzi către alta, PowerShell trece de fapt obiectul, nu doar rezultatul text al primei linie de comandă. Aceasta oferă următoarei comenzi acces complet la toate proprietățile și metodele obiectului din conductă.

Tratarea totul ca pe un obiect și capacitatea de a accepta obiecte între comenzi este o mare schimbare teoretică pentru utilitarele liniei de comandă. Acestea fiind spuse, PowerShell încă funcționează ca un utilitar shell tradițional. Comenzile, scripturile și executabilele pot fi tastate și rulate din linia de comandă, iar rezultatele sunt afișate în format text. Fișierele Windows .CMD și .BAT, VBScript-urile, JScript-urile și executabilele care rulează în interiorul CMD.EXE încă rulează în PowerShell. Cu toate acestea, deoarece nu sunt orientate pe obiecte, nu au acces deplin la obiectele create și utilizate în PowerShell. Aceste scripturi și execuții vechi vor trata în continuare totul ca text, dar puteți combina PowerShell cu o serie de alte tehnologii. Acesta este un punct foarte important dacă doriți să începeți să utilizați PowerShell cu o colecție de scripturi existente care nu pot fi convertite simultan.

Parametrii PowerShell explicați

Cmdleturile pot accepta parametri pentru a-și 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 rulează fiecare comandă PowerShell.

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

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

Dar dacă vrei doar să obții un anumit progres? Puteți face acest lucru folosind parametrii. De exemplu, pentru a obține toate procesele Slack, puteți utiliza parametrul Name cu cmdletul Get-Process:

Get-Process -Name Slack

Apoi veți vedea doar procesele numite „slack”:

PowerShell și tot ce trebuie să știți 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 efectuează ambele aceeași sarcină.

Fiecare cmdlet va accepta diferite tipuri de parametri. Utilizați 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 în care puteți rula cmdlet-ul dat:

PowerShell și tot ce trebuie să știți despre acest utilitar
parametrii de sintaxă 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ă intrare

-

Cratimă

Specificați numele parametrului

<>

paranteze

Substituent 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, întreg, boolean sau DateTime. De exemplu, următoarea comandă:

Get-Process [[-Name] ]

... înseamnă că parametrul Nume acceptă una sau mai multe valori de șir, î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. Cu toate acestea, dacă doriți să-l restrângeți la un proces mai specific, puteți utiliza parametrul ID , care necesită un număr întreg, așa cum este menționat în sintaxa acestuia.

Get-Process -Id 3016

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

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

Creați o conductă

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

Să presupunem că creați un script pentru a sorta și afișa primele 5 fișiere care ocupă cel mai mult spațiu într-un folder. Există modalități mai puternice de a crea un script de sortare a fișierelor, dar următorul simplu este ușor de înțeles:

PowerShell și tot ce trebuie să știți despre acest utilitar
Script Sort-LargeFiles 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 pipeline ca script PS1

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

Cel mai simplu mod 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ă știți despre acest utilitar
Creați script cu Notepad

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

PowerShell și tot ce trebuie să știți despre acest utilitar
Folosind script 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 un script PowerShell PS1.

Exemplu de script PowerShell

Citirea și înțelegerea minunilor noilor tehnologii este una, dar folosirea efectivă a acesteia este alta! În restul acestui articol, vom dezvolta un script PowerShell pentru a demonstra capacitățile și utilizarea acestuia.

DIR este una dintre cele mai comune comenzi din CMD.EXE . Această comandă arată toate fișierele și subdirectoarele conținute într-un director părinte (așa cum se arată în Figura 1). Alături de numele fiecărui obiect, informațiile furnizate includ și 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 totalul subdirectoarelor.

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

Rularea DIR în PowerShell produce, de asemenea, o listă de director precum Figura 2, dar este puțin 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 pseudonime în această postare. Vă puteți gândi la DIR în PowerShell ca la o abreviere pentru Get-ChildItem.

DIR în PowerShell oferă o mare parte din aceleași informații ca cele menționate mai sus: o listă de fișiere și foldere, data și ora la care au fost actualizate ultima dată și dimensiunea fiecărui fișier. Cu toate acestea, îi lipsesc informațiile rezumate pe care le oferă DIR în CMD.EXE: dimensiunea totală a tuturor fișierelor din director, numărul total de fișiere și numărul total de subdirectoare.

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

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

DIR.PS1: Antet

Un script PowerShell constă din comenzi PowerShell într-un fișier text simplu cu extensia .PS1. În loc de DIR, veți folosi 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) și Folder este numele folderului.

Dacă doriți să aflați câteva informații despre partiția unității, va trebui să utilizați Windows Management Instrumentation (WMI). Detaliile WMI depășesc domeniul de aplicare al acestui articol, așa că nu le vom acoperi aici. Dar codul PowerShell de mai jos este, de asemenea, destul de ușor de înțeles fără a fi nevoie de ajutor WMI. Puteți crea o variabilă „$filter” pe care să o utilizați cu comanda Get-WmiObject. Această variabilă de filtru spune comenzii Get-WmiObject că doriți doar informații despre o anumită unitate. Rezultatul comenzii Get-WmiObject este stocat într-o variabilă numită $volInfo. Amintiți-vă, în PowerShell totul este un obiect; $volInfo este acum și un obiect rezultat returnat de la Get-WmiObject.

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

Acum puteți accesa toate obiectele și metodele asociate cu obiectul. Numărul de serie al volumului este accesibil prin proprietatea VolumeSerialNumber. Informația returnată este un șir de 8 caractere. Dar, de obicei, doriți să îl formatați ca patru numere separate, separate printr-o cratimă. se poate face în mod similar ca în rândul de mai jos. Cratima de la sfârșitul primei rânduri este caracterul de continuare a liniei în PowerShell. Practic îi spune lui PowerShell că linia nu este întreruptă, ci include următoarea linie. Când scrieți cod, nu este nevoie să separați linii, dar pentru a reduce lățimea și pentru a face codul mai ușor de citit, ar trebui să faceți acest lucru.

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

Acum că aveți obiectul $volInfo, puteți scrie informațiile antetului DIR pe ecran. Dacă unitatea nu are nume, textul scris pe ecran va fi ușor diferit decât dacă unitatea are un nume. O instrucțiune simplă If-Else este folosită pentru a verifica dacă proprietatea VolumeName este un șir gol sau nu. Comanda Write-Host este folosită pentru a scrie linii individuale de comandă 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 folosit pentru a insera linii noi înainte și după text. Comanda Write-Host adaugă o nouă linie la sfârșitul fiecărei linii. Deci efectul lui „ `n ” este de a crea linii goale înainte și după linia textului.

Ați observat „-eq” în comanda If? Este un operator de comparare a egalității. Tabelul de mai jos vă va arăta toți operatorii de comparație:

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

Caracterul -i dinaintea operatorilor de comparație indică faptul că operatorul nu face distincție între majuscule și minuscule.

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

DIR.PS1: Lista fișierelor/directoarelor

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 un set de fișiere și a le trece în script ca parametru. Comanda Get-ChildItem va prelua o colecție de obiecte de fișiere și foldere, nu doar numele lor, ci va trimite și aceste obiecte direct în comanda Sort-Object pentru a le sorta. În mod implicit, comanda Sort-Object va sorta obiectele pe baza proprietății Name. Deci nu trebuie să descrii alți parametri. Setul sortat de obiecte va fi apoi stocat într-o variabilă numită $items.

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

Odată ce aveți o colecție de obiecte fișier și folder, trebuie să le parcurgeți și să afișați caracteristicile corespunzătoare. Comanda folosită pentru aceasta este ForEach. Pentru fiecare fișier sau folder, caracteristicile afișate vor fi data și ora ultimei actualizări, numele, lungimea sau dimensiunea fișierului. Șirurile cu aspect ciudat din paranteze sunt coduri în format de șir .NET. Sunt folosite pentru a alinia câmpurile stânga/dreapta și pentru a formata date, ore, numere. Înțelegerea acestor coduri de format de șir nu este foarte importantă, deoarece nu sunt esențiale pentru natura acestui script.

Comanda If este locul în care determinați dacă un obiect este un director sau nu. Dacă primul caracter al atributului Mode este „d”, obiectul este un director. Trebuie să verificați din nou, deoarece codul scris pentru directoare este adesea diferit de codul scris pentru fișiere.

Observați linia $totalDirs++ din interiorul instrucțiunii If. Acesta este contorul responsabil pentru ținerea evidenței numărului de foldere. Î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 acestea sunt afișate numai când procesul de listare a fișierelor este încheiat.

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ă știți despre acest utilitar
Figura 4: Afișează datele de ieșire ale scriptului actualizat.

DIR.PS1: Subsol

Singurul lucru rămas de făcut este să scrieți pe ecran numărul total de fișiere, foldere, dimensiunea totală a tuturor fișierelor și spațiul liber pe această partiție a unității. Pentru a face acest lucru, va trebui să utilizați variabilele contor ($totalFiles, $totalDirs, $totalSize) create în secțiunea anterioară. Puteți afla cât spațiu liber există 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ă știți despre acest utilitar
Figura 5: Afișează datele complete de ieșire ale scriptului.

Prognozele ș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 unele îmbunătățiri care pot fi aduse.

  • Acest script nu efectuează nicio verificare a erorilor.
  • Dacă o cale validă nu este transmisă scriptului, scriptul va eșua cu un mesaj de eroare PowerShell.
  • Numărul total de directoare date în script este cu 2 mai mic decât rezultatul din comanda CMD.EXE DIR, deoarece comanda Get-ChildItem nu numără cele două „.” și „..” ca în CMD.EXE.
  • Scriptul dvs. sortează numai după numele fișierului, numele folderului și nu oferă nicio altă sortare după atribute.
  • Scriptul dvs. nu poate afișa conținutul folderului și al tuturor subdosarelor.

Cum vă ajută PowerShell să automatizați orice pe computer

Scrieți scripturi PowerShell simple

Puteți folosi PowerShell pentru a automatiza aproape orice, cum ar fi redenumirea în lot a fișierelor 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 cu privire la politica de execuție, poate fi necesar să permiteți temporar executarea scriptului rulând „Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass”

Redenumiți în loturi fișierele dintr-un folder

Puteți folosi PowerShell pentru a copia, muta și șterge fișiere de pe computer. De asemenea, puteți redenumi în loturi fișierele cu un anumit tip de fișier. De exemplu, iată cum puteți redenumi mai multe fișiere text prin înlocuirea prefixului „oldco” cu „newco” în numele fișierelor:

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

În scriptul de mai sus, „.txt” este filtrul de extensie a fișierului. Î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ă deschideți același set de aplicații în fiecare zi, puteț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, pur și simplu faceți dublu clic pe fișier pentru a lansa toate aplicațiile enumerate în script.

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

Puteți face backup periodic la fișierele importante într-o locație de rezervă folosind 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

Din cauza numeroaselor tipuri de fișiere care sunt descărcate în fiecare zi, folderul Descărcări poate deveni rapid aglomerat 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 nou fișier Notepad și inserați următorul script. Asigurați-vă că modificați calea folderului sursă în 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.

Programați și executați sarcini

Desigur, scripting-ul face parte din procesul de automatizare. A doua parte este să vă asigurați că scriptul poate fi executat automat pentru a efectua 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ă a fișierului către scriptul dvs. 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 pe Enter . Scriptul va crea o sarcină programată în Task Scheduler pentru a rula scriptul de organizare a fișierelor în fiecare zi, la 5:00 PM. Dacă preferați un timp diferit, îl puteți modifica în scriptul de mai sus.

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

Deși PowerShell este un limbaj de scripting și un utilitar 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, împreună cu exemplul de script, va fi util oricărei persoane care dorește să înțeleagă PowerShell. Dar scriptul creat în exemplu este destul de simplu. Credeți că poate fi construit și dezvoltat mai complet pentru a servi mai bine pentru aplicații mai complexe.

Sign up and earn $1000 a day ⋙

Leave a Comment

Cum să redobândești accesul la hard disk, remediază eroarea de imposibilitate de deschidere a hard disk-ului

Cum să redobândești accesul la hard disk, remediază eroarea de imposibilitate de deschidere a hard disk-ului

În acest articol, vă vom ghida cum să recâștigați accesul la hard disk atunci când acesta se defectează. Haideți să urmăm pasul!

Cum se utilizează Conștientizarea conversațiilor și Ascultarea live pe AirPods

Cum se utilizează Conștientizarea conversațiilor și Ascultarea live pe AirPods

La prima vedere, AirPods arată exact ca orice alte căști wireless. Dar totul s-a schimbat odată cu descoperirea câtorva caracteristici mai puțin cunoscute.

Totul despre iOS 26

Totul despre iOS 26

Apple a lansat iOS 26 – o actualizare majoră cu un design complet nou, din sticlă mată, experiențe mai inteligente și îmbunătățiri ale aplicațiilor familiare.

Cele mai bune laptopuri pentru studenți în 2025

Cele mai bune laptopuri pentru studenți în 2025

Studenții au nevoie de un anumit tip de laptop pentru studiile lor. Acesta nu ar trebui să fie doar suficient de puternic pentru a performa bine la specializarea aleasă, ci și suficient de compact și ușor pentru a fi transportat toată ziua.

Cum se adaugă o imprimantă în Windows 10

Cum se adaugă o imprimantă în Windows 10

Adăugarea unei imprimante la Windows 10 este simplă, deși procesul pentru dispozitivele cu fir va fi diferit față de cel pentru dispozitivele fără fir.

Cum să verificați memoria RAM și erorile RAM de pe computer cu cea mai mare precizie

Cum să verificați memoria RAM și erorile RAM de pe computer cu cea mai mare precizie

După cum știți, memoria RAM este o componentă hardware foarte importantă a unui computer, acționând ca memorie pentru procesarea datelor și fiind factorul care determină viteza unui laptop sau PC. În articolul de mai jos, WebTech360 vă va prezenta câteva modalități de a verifica erorile de RAM folosind software pe Windows.

Diferența dintre televizorul obișnuit și Smart TV

Diferența dintre televizorul obișnuit și Smart TV

Televizoarele inteligente au luat cu adevărat lumea cu asalt. Cu atât de multe funcții grozave și conectivitate la internet, tehnologia a schimbat modul în care ne uităm la televizor.

De ce congelatorul nu are lumină, dar frigiderul are?

De ce congelatorul nu are lumină, dar frigiderul are?

Frigiderele sunt aparate cunoscute în gospodării. Frigiderele au de obicei 2 compartimente, compartimentul cool este spatios si are o lumina care se aprinde automat de fiecare data cand utilizatorul il deschide, in timp ce compartimentul congelator este ingust si nu are lumina.

2 moduri de a remedia congestionarea rețelei care încetinește conexiunea Wi-Fi

2 moduri de a remedia congestionarea rețelei care încetinește conexiunea Wi-Fi

Rețelele Wi-Fi sunt afectate de mulți factori, dincolo de routere, lățime de bandă și interferențe, dar există câteva modalități inteligente de a vă îmbunătăți rețeaua.

Cum să downgrade de la iOS 17 la iOS 16 fără a pierde date folosind Tenorshare Reiboot

Cum să downgrade de la iOS 17 la iOS 16 fără a pierde date folosind Tenorshare Reiboot

Dacă doriți să reveniți la iOS 16 stabil pe telefonul dvs., iată ghidul de bază pentru dezinstalarea iOS 17 și downgrade de la iOS 17 la 16.

Ce se întâmplă cu organismul când mănânci iaurt în fiecare zi?

Ce se întâmplă cu organismul când mănânci iaurt în fiecare zi?

Iaurtul este un aliment minunat. Este bine să mănânci iaurt în fiecare zi? Când mănânci iaurt în fiecare zi, cum se va schimba corpul tău? Să aflăm împreună!

Ce tip de orez este cel mai bun pentru sănătate?

Ce tip de orez este cel mai bun pentru sănătate?

Acest articol discută cele mai hrănitoare tipuri de orez și cum să maximizați beneficiile pentru sănătate ale orezului pe care îl alegeți.

Cum să te trezești la timp dimineața

Cum să te trezești la timp dimineața

Stabilirea unui program de somn și a rutinei de culcare, schimbarea ceasului cu alarmă și ajustarea dietei sunt câteva dintre măsurile care vă pot ajuta să dormiți mai bine și să vă treziți la timp dimineața.

Sfaturi pentru a juca Rent Please! Proprietar Sim pentru începători

Sfaturi pentru a juca Rent Please! Proprietar Sim pentru începători

Inchiriez va rog! Landlord Sim este un joc mobil de simulare pe iOS și Android. Veți juca ca proprietarul unui complex de apartamente și veți începe să închiriați un apartament cu scopul de a îmbunătăți interiorul apartamentelor și de a le pregăti pentru chiriași.

Cele mai recente coduri de apărare a turnului de baie și cum să introduceți codurile

Cele mai recente coduri de apărare a turnului de baie și cum să introduceți codurile

Obțineți codul de joc Roblox Bathroom Tower Defense și răscumpărați pentru recompense interesante. Ele vă vor ajuta să faceți upgrade sau să deblocați turnuri cu daune mai mari.