În prima parte, ți-am arătat câteva lucruri interesante pe care le poți face cu PowerShell, ai acoperit istoria PowerShell și ai explorat în profunzime capabilitățile PowerShell ca pe un limbaj puternic de scripting care suportă programarea procedurală, funcțională și orientată pe obiecte.
În partea a doua, voi discuta shell-ul interactiv, profilul și promptul și voi compara PowerShell cu Bash.
PowerShell a fost conceput de la lansarea ca shell interactiv pentru administratorii de sistem Windows și utilizatorii de putere. Se concentrează pe un număr mic de concepte, foarte o experiență consistentă și o conductă de obiect care lansează și combină comenzi, le filtrează și le formatează. Sistemul său de ajutor puternic, care aderă și la un format consistent, este o plăcere de folosit.
Să vedem câteva dintre acestea în acțiune.
Sistemul de ajutor cuprinzător este accesibil prin Obține ajutor
.
PS C: \ WINDOWS \ system32> Ajutor Invoke-WebRequest NAME Invoke-WebRequest SYNOPSIS Obține conținut de pe o pagină web de pe Internet. SYNTAX Invoke-WebRequest [-Uri][-Corp
Pentru a obține ajutor mai detaliat și a vedea exemple, utilizați comutatoarele corespunzătoare: -exemple
, -Detalii
, sau -deplin
.
Dacă nu sunteți sigur ce este numele comenzii, utilizați doar cuvintele cheie și PowerShell vă va arăta toate comenzile disponibile care conțin acest cuvânt cheie. Să vedem ce cmdleturi legate de CSV sunt disponibile:
PS C: \ Utilizatorii \ the_g> Obțineți-Help -Cmdlet csv | selectați nume Nume ---- ConvertFrom-Csv ConvertTo-CSV Export-CSV Import-CSV
Am creat o mică conductă unde am limitat apelul Get-Help numai la categoria Cmdlet și apoi i-am conectat la "select" (alias pentru Select-Object) pentru a obține doar proprietatea "name".
Puteți face tot ceea ce vă obișnuiți: navigarea la diverse directoare, listare fișiere și subdirectoare, examinarea conținutului fișierelor, crearea de directoare și fișiere etc..
PS C: \ Utilizatorii \ the_g> mkdir test_dir | selectați nume Nume ---- test_dir PS C: \ Users \ the_g> cd. \ test_dir C: \ Users \ the_g \ test_dir> "123"> test.txt PS C: \ Users \ the_g \ test_dir> ls | nume Nume ---- test.txt PS C: \ Users \ the_g \ test_dir> primiți conținut. \ test.txt 123
Cu PowerShell, puteți trata multe lucruri ca sisteme de fișiere și navigați-le folosind CD
și verificați conținutul lor folosind ls / dir
. Iată câțiva furnizori suplimentari:
Provider Drive Data Store -------- ----- ---------- Alias Alias: aliasuri Windows PowerShell Certificat Cert: certificate x509 pentru semnături digitale Mediu Env: variabile de mediu Windows Funcție Funcție: Funcțiile Windows PowerShell Registrul HKLM :, HKCU: Windows registry Variabila variabilă: Variabile Windows PowerShell WSMan WSMan: Informații despre configurarea WS-Management
Să verificăm mediul și să vedem ce variabile de mediu legate de Go sunt acolo (pe mașina mea):
PS C: \ Users \ the_g> ls env: GO * Nume Valoare ---- ----- GOROOT C: \ GO \ GOPATH C: \ Utilizatorii \ the_g \ Documents \ Go
PowerShell încurajează compilarea de cmdleturi cu comutatoare standard și crearea de conducte. Formatarea este un concept explicit în cazul în care la sfârșitul unei conducte ați pus un formatator. PowerShell, în mod implicit, examinează tipul de obiect sau obiecte de la capătul țevii și aplică un formatator implicit. Dar puteți să o înlocuiți prin specificarea unui formatator. Formatatorii sunt doar cmdleturi. Iată rezultatul anterior afișat în formatul listei:
PS C: \ Utilizatorii \ the_g> ls env: GO * | Format Nume listă: GOROOT Valoare: C: \ Go \ Nume: GOPATH Valoare: c: \ Users \ the_g \ Documents \ Go
Utilizatorii de putere care utilizează linia de comandă au frecvent multe sarcini, conducte și combinații preferate de comenzi cu comutatoare implicite pe care le favorizează. Profilul PowerShell este un fișier script PowerShell care este încărcat și executat ori de câte ori începeți o nouă sesiune. Puteți să vă puneți toate bunele dvs. preferate, să creați aliasuri și funcții, să setați variabile de mediu și aproape orice altceva.
Îmi place să creez alias-uri de navigare în directoare imbricate, să activez mediile virtuale Python și să creez comenzi rapide la comenzile externe pe care le rulez frecvent, cum ar fi git și doc-ul.
Pentru mine, profilul este indispensabil deoarece comenzile și comenzile foarte ușor de citit și coerente ale PowerShell sunt adesea prea verbose, iar aliasurile încorporate sunt adesea mai multe probleme decât ajutor (am discutat mai târziu). Iată un fragment foarte parțial din profilul meu:
# --------------------------- # # DOCKER # # ----------------- ---------- Set-Alias -Name d -Value funcția docker di d imagini # ------------------------ --- # # GIT # # --------------------------- Set-Alias -Name g -Value git funcția gs g status funcție gpu g trage --rebase # ------------------------- # # CONDA # # ---------- --------------- funcția a activate.ps1 $ args [0] # ---------------------- - # # NAVIGARE # # ------------------------ funcție cdg cd $ github_dir # Funcția MVP cdm a ov; CDG; cd MVP # funcția backend cdb a ov; CDG; cd backend # funcții de ștergere cd a ov; CDG; cd scratch # backend pachete funcția cdbp cdb; pachete cd # Funcție spațiu de lucru Go cdgo cd $ go_src_dir
PowerShell vă permite să personalizați promptul de comandă. Trebuie să definiți o funcție numită prompt()
. Puteți vedea funcția promptă încorporată:
PS C: \ Users \ the_g> funcția gc: prompt "PS $ ($ executionContext.SessionState.Path.CurrentLocation) $ ('>' * ($ nestedPromptLevel + 1)); ## Link C # # http://go.microsoft.com/fwlink/?LinkID=225750 # .ExternalHelp System.Management.Automation.dll-help.xml C: \ Users \ the_g>
Aici este o funcție de prompt personalizat care afișează ora curentă în plus față de directorul curent:
PS C: \ Users \ the_g> promptul funcției "$ (get-date) $ (get-location)>"
10/09/2016 12:42:36 C: \ Users \ the_g>
Poți să te duci sălbatic, bineînțeles, și să adaugi culori și să verifici diverse condiții cum ar fi dacă ești într-un depozit git special sau dacă ești administrator.
PowerShell a avut nume greșite, în opinia mea, pe două fronturi separate. În primul rând, alias
comanda permite doar redenumirea comenzilor. Nu puteți adăuga steaguri sau opțiuni comune pentru a face comenzi mai utile prin aliasingul lor înșiși.
De exemplu, dacă doriți să căutați text în linie, puteți utiliza funcția Selectați-String
cmdlet:
# Creați un mic fișier text cu 3 linii "@ ab cd ef @"> 1.txt # Căutați o linie care conține d Get-Content 1.txt | Selectați-String d cd
Asta merge, dar mulți oameni ar dori să redenumească Selectați-String
la grep
. Dar grep
este în mod implicit sensibil la caz, în timp ce Selectați-String
nu este. Nu este mare lucru - vom adăuga doar -Caz sensibil
ca în:
Setați-Alias -Game grep -Value "Select-String -CaseSensitive"
Din păcate, aceasta nu funcționează:
16:19:26 C: \ Users \ the_g> Obțineți conținut 1.txt | grep D grep: Termenul "Select-String-CaseSensitive" nu este recunoscut ca nume de fișier cmdlet, funcție, fișier script sau program operabil. Verificați ortografia numelui sau dacă a fost inclusă o cale, verificați dacă traseul este corect și încercați din nou. La rând: 1 char: 21 + Get-Content 1.txt | grep D + ~~~~ + CategoryInfo: ObjectNotFound: (Select-String -CaseSensitive: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
Valoarea unui pseudonim trebuie sa fie un cmdlet, o funcție, un script sau un program. Nu sunt permise steaguri sau argumente.
Acum, puteți face acest lucru foarte ușor în PowerShell, dar va trebui să utilizați funcții și nu aliasuri. Acest lucru constrânge destul de mult pseudonimele de redenumirea simplă, care poate fi făcută și prin funcții.
Pe partea shell-ului interactiv, PowerShell și Bash sunt destul de egale. Bash este mai concis în mod prestabilit, dar conducta obiectului PowerShell face ca conductele complicate să fie mai ușor de gestionat. ,
Acestea fiind spuse, probabil că puteți realiza ceva cu oricare dintre ele și dacă sunteți un utilizator de putere, veți avea propriile pseudonime, funcții și comenzi rapide pentru sarcini comune. Pe partea scripting, PowerShell merge mult dincolo de Bash, iar pentru administrarea sistemului chiar bate Python, Ruby și prietenii.
Un aspect important este disponibilitatea. Bash vine pre-instalat cu cele mai multe distribuții * nix (cu excepția cazului în care este special dezbrăcat) inclusiv macOS. Acesta poate fi, de asemenea, instalat pe Windows prin intermediul cygwin, git-bash sau msys. PowerShell vine preinstalat pe Windows și tocmai recent a devenit disponibil pe Mac și Linux.
Dacă utilizați Windows ca mașină de dezvoltare sau dacă gestionați Windows, atunci PowerShell este un instrument indispensabil. Este cu adevărat o superset bine gândită a shell-urilor Unix și vine pre-instalată.
PowerShell este o inginerie excelentă de software la locul de muncă. A evoluat peste un deceniu și a păstrat inovația, menținându-și integritatea conceptuală originală. Comutarea recentă la semnalele open source și cross-platform semnalează că mai sunt încă multe de așteptat.