Puterea PowerShell, Partea 2

Î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: Shell-ul interactiv

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.

Obținerea de ajutor

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 ] [-Certificați ] [-CertificateThumbprint ] [-Tipul de conținut ] [-Credențială ] [-DisabilKeepAlive] [-Deadere ] [-InFile ] [-Redirecție maximă ] [-Metod Implicit | Obțineți | Cap. | Post | Pune | Ștergeți | Trace | Opțiuni | Merge | Patch] [-OutFile ] [-PassThru] [-Proxy ] [-ProxyCredential ] [-ProxyUseDefaultCredentials] [-SessionVariable ] [-TimeoutSec ] [-TransferEncodare chunked | compress | deflate | gzip | identitate] [-UseBasicParsing] [-UseDefaultCredentials] [-UserAgent ] [-WebSession ] [] DESCRIERE cmdletul Invoke-WebRequest trimite solicitări HTTP, HTTPS, FTP și FILE către o pagină web sau un serviciu web. Ea analizează răspunsul și returnează colecții de formulare, link-uri, imagini și alte elemente HTML semnificative. Acest cmdlet a fost introdus în Windows PowerShell 3.0. RELATED LINKS Versiune Online: http://go.microsoft.com/fwlink/?LinkId=821826 Invoke-RestMethod ConvertFrom-Json ConvertTo-Json OBSERVAȚII Pentru a vedea exemplele, tastați: "get-help Invoke-WebRequest -examples". Pentru mai multe informații, tastați: "get-help Invoke-WebRequest -detailed". Pentru informații tehnice, tastați: "obțineți ajutor Invoke-WebRequest -full". Pentru ajutor online, tastați: "get-help Invoke-WebRequest -online"

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".

Lucrul cu fișiere și directoare

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

Lucrul cu alți furnizori

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 

Formatarea

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 

Profilul

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

Promptul 

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.

Aliasuri: The Dark Side

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.

PowerShell vs. Bash

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.

Concluzie

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.

Cod