PowerShell este o coajă interactivă și limbaj de scripting de la Microsoft, care regândește ce este vorba despre shell-ul de comandă. Are capabilități foarte interesante deasupra și dincolo de shell-urile familiare Unix, și există un puternic ecosistem și comunitate.
În acest tutorial în două părți, veți afla despre unele lucruri interesante pe care le puteți face cu PowerShell, istoria sa, arhitectura, conceptele sale și cum se compară cu o cochilie Unix, cum ar fi Bash. Pregătește-te pentru o călătorie interesantă!
Dacă sunteți pe Windows 10, sunteți bine să mergeți. În caz contrar, descărcați-l de pe site-ul Microsoft.
Odată ce este instalat PowerShell, primul lucru pe care doriți să îl faceți este să permiteți executarea scriptului. Lansați PowerShell ca administrator și tip: Set-ExecutionPolicy RemoteSigned
. Trebuie să o faci o singură dată. Actualizați fișierele de ajutor: Actualizare-Ajutor -Force
.
Să începem cu o demonstrație rapidă a lățimii și adâncimii PowerShell. Aceasta este doar o listă oarecum arbitrară pentru a vă mânui apetitul. Nu este cuprinzător și nici nu sunt neapărat cele mai impresionante lucruri pe care le puteți face cu PowerShell.
Iată un joc răcoros pentru a reda fișiere video (sau orice fișier media):
(New-object -COM WMPlayer.OCX) .openPlayer ("Calea către videoclipul dvs.")
Se va deschide o fereastră a playerului media și va începe imediat redarea videoclipului.
PowerShell are una din soluțiile cele mai citibile și mai plăcute din punct de vedere vizual pentru șirurile multi-linie, AKA "aici șiruri de caractere". Începeți @“
și se termină cu „@
. Rețineți că marcajele de început și de sfârșit trebuie să fie pe linia lor proprie, separate de conținutul între ele. Iată un exemplu:
$ x = "@ 123 456 789 @"
Alegeți un număr aleator între 1 și 100:
1 ... 50 | Get-aleatoare
Aceasta este o conductă simplă. Partea stângă poate genera toate numerele întregi de la 1 la 50 (inclusiv), iar apoi este alimentată în cmdletul Get-Random care alege una dintre ele.
PowerShell acceptă clipboard în profunzime. Puteți obține și seta obiecte de diferite formate. Evident, textul simplu este posibil, dar puteți lucra și cu imagini, HTML, RTF și chiar cu fișiere.
Aici, am selectat unele fișiere în explorator și apoi le-am luat de la clipboard în PowerShell:
23:43:05 C: \ Users \ the_g> Obțineți-Clipboard -Files Mode LastWriteTime Nume lungime ---- ------------- ------ ---- -a ---- 9/15/2016 11:41 PM 135890 Capture.PNG -a ---- 9/16/2016 10:09 PM 3179548 20160917_110605.jpg -a ---- 9/16/2016 10:09 PM 4623977 20160917_110734.jpg
PowerShell poate vorbi prea!
Adăugați-Type -AssemblyName System.speech $ synth = New-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer $ synth.Speak ("PowerShell pentru oameni")
Iată o mică conductă pentru a lista toate mașinile virtuale care rulează:
Get-VM | Unde-Obiect $ _. State -eq "Running"
PowerShell poate afișa o bara de progres frumos în timpul operațiunilor lungi. Iată un exemplu care calculează în mod recursiv dimensiunea totală a tuturor fișierelor din directorul curent:
$ files = Get-ChildItem. -Recurse $ total = 0 Pentru ($ i = 1; $ i -le $ files.Count-1; $ i ++) Write-Progress -Activity "Calculul dimensiunii totale ..." -status $ files [$ i] .Name - PercentComplete ($ i / $ files.Count * 100) $ total + = $ fișiere [$ i] .Length Start-Sleep -Milleiseconds 50 Sucursală de scriere "Dimensiune totală: $ ($ total / 1MB)
PowerShell 1.0 a fost lansat în 2006, dar inventatorul său Jeffery Snover a început să lucreze la el mult mai devreme. Verificați manifestul din 2002. PowerShell a parcurs un drum lung. Ferestrele au rămas în urmă în ceea ce privește facilitățile de comandă. Administratorii de sistem și utilizatorii de putere au trebuit să se descurce cu ofertele slabe ale fișierelor cmd.exe și batch. Au existat câteva încercări slabe de îmbunătățire a situațiilor cu gazde de scripting Windows care permiteau obiecte de sistem de scripting folosind VBScript sau JScript, dar există multe probleme cu această abordare.
PowerShell a schimbat toate acestea și foarte repede. Acesta nu se potrivea doar cu capabilitățile liniei de comandă ale mediilor * nix, ci a fost însoțit de multe inovații și consistență fără precedent și ușurință în utilizare.
Astăzi, PowerShell se află la versiunea 5.1. De-a lungul anilor și versiunilor, capabilitățile PowerShell și mediile de găzduire au crescut semnificativ.
PowerShell 1.0 administrarea locală administrativă a mașinilor Windows (inclusiv Windows Server 2003).
PowerShell 2.0 a fost integrat cu Windows 7 și Windows Server 2008 R2. A adăugat suport pentru remoting și a mărit în mod semnificativ capabilitățile PowerShell cu funcții de fundal, tranzacții, evenimente, depanare, un mediu de dezvoltare GUI și multe cmdlete noi.
PowerShell 3.0 a fost lansat ca parte a cadrului de management Windows. A fost instalat pe Windows 8 și pe Windows Server 2012. Acesta a adăugat sarcini programate, conectivitate pentru sesiuni, încărcare automată a modulelor și multe comenzi noi.
PowerShell 4.0 a fost integrat cu Windows 8.1 și Windows Server 2012 R2. A adăugat suport pentru configurația de stare dorită, depanare îmbunătățită, diagnostice de rețea și -PipelineVariable
intrerupator.
PowerShell 5.0 a fost lansat ca parte a cadrului de management Windows 5. PowerShell 5.1 a fost lansat ca parte a actualizărilor aniversării Windows 10. Noile caracteristici includ definiții de clasă PowerShell, enumerări .NET, depanare la distanță și depanare lucrări de fundal, manager de configurare local DSC și multe îmbunătățiri DSC.
PowerShell este un limbaj de programare foarte puternic. Acesta poate rula scripturi, evident, dar are și mecanisme mai avansate, cum ar fi module, cmdlet-uri personalizate și clase. PowerShell este un limbaj multi-paradigm care susține paradigmele orientate pe obiecte, funcționale și procedurale.
Dar poate cel mai important aspect al PowerShell este că acesta este un limbaj .NET cu drepturi depline. Creează și utilizează obiecte asamblate .NET programate în orice limbă, iar obiectele care trec prin conducta PowerShell sunt obiecte .NET. PowerShell este de asemenea puternic tastat, dar când este convenabil, îl puteți ignora și nu trebuie să specificați tipurile dacă nu doriți.
Pentru a programa procedural, aveți nevoie de funcții, condiționări și bucle. PowerShell are toate acestea. Operatorii de comparare vă pot surprinde, deoarece nu folosesc simbolurile tipice. În schimb, aveți: -eq
(egal), -lt
(mai puțin decât), -gt
(mai mare ca), -GE
(mai mare sau egală), etc.
Iată un exemplu de logică condiționată, care primește informații de la utilizator și verifică dacă este valid. Rețineți utilizarea -la fel de
operator pentru a încerca să convertească intrarea la un număr întreg. Dacă nu reușește, rezultatul este $ null
.
$ value = 44 $ in = Read-Host "Ghici un numar intre 1 - 100" $ guess = $ in -as [int] daca (($ gess -eq $ null) ($ gess -gt 100)) Write-Host "$ ghicieste NU este un intreg intre 1-100" Exit daca ($ ghici -eq $ valoare) Write-Host "You Win!" elseif ($ guess -lt $ value) Write-Host "prea mic" altceva Write-Host "prea mare"
PowerShell are multe facilități și cmdlet-uri pentru a lucra cu colecții, felie și zaruri, astfel încât buclele nu sunt adesea necesare. Dar, doar în cazul în care sunteți atât de înclinat, există o mulțime de construcții învechite în PowerShell. Aveți posibilitatea să utilizați bucle For, bucle ForEachine, bucle în timp ce, bucle Do-While și chiar bucle speciale ForEach-Object. Aici sunt cateva exemple.
Pentru $ ($ i = 0; $ i -lt 100; $ i + = 20) $ i 0 20 40 60 80 $ lista = 1 ... 5 ForEach ($ item in $ list) $ item * 3 9 12 15 $ mai târziu = $ (Get-Date) .AddSeconds (5) în timp ce ($ (Get-Date) -lt $ later) "E încă acolo?" somn 1 PS C: \ WINDOWS \ system32> $ later = $ (Get-Date) .AddSeconds (5) în timp ce ($ (Get-Date) -lt $ later) somn 1 Suntem noi încă acolo? Am ajuns? Am ajuns? Am ajuns? Am ajuns?
PowerShell este vorba despre programarea funcțională. Conducta este un mediu de execuție funcțional în care se compun dinamic funcții / cmdleturi. Puteți face acest lucru interactiv sau puteți face un scenariu. Dacă doriți să faceți programare explicită funcțională, o puteți face și ea, dar sintaxa este puțin greoaie. Consultați acest articol: Programare funcțională în PowerShell.
Ați văzut deja cum să utilizați obiectele .NET și obiectele care trec prin conductă. Să definim o clasă în PowerShell și să facem o OO de bază. Creez aici o clasă pentru un personaj de joc cu sănătate și armură, care poate lua daune și să-și calculeze sănătatea. Există, de asemenea, un Este in viata()
metodă care verifică dacă sănătatea este> 0. Eu folosesc un constructor.
Rețineți că trebuie să instanțiați clasele PowerShell utilizând [
. Sintaxa noului obiect nu este acceptată ca din PowerShell 5.1.
($) $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [ $ this.Name = $ nume $ this.Health = $ sănătate $ this.AttackDamage = $ attackDamage $ this.Armor = $ armor [bool] IsAlive () return $ this.Health -gt 0 [void] TakeDamage [int] $ daune) if ($ this.armor -gt 0) $ damage = $ daune - 0.4 * $ this.Armor * $ damage $ this.Health - = $ damage $ c = ($) $ c.IsAlive () $ $ c.IsAlive () $ $ c.TakeDamage ($) $ c.Health 14 $ c.TakeDamage () 40) $ c.Filmă -10 $ c.IsAlive () Falsă
Poți chiar să faci moștenire dacă vrei, dar simt că în acest moment probabil că ar trebui să folosești o altă limbă.
PowerShell vine cu propriul IDE pentru dezvoltarea de script-uri, care include o fereastră interactivă, tab-uri multiple pentru scripturi cu completare de cod, ajutor încorporat pentru toate cmdlet-urile și multe altele. Este un instrument foarte slick și vă recomand să încercați.
Ați văzut acum capabilitățile PowerShell ca limbaj de scripting și ați învățat puțin despre obiectivele de proiectare și despre istoria sa. În partea a doua, voi acoperi în profunzime aspectele interactive ale PowerShell.