PowerShell er et interaktivt shell- og skriptspråk fra Microsoft som gjenspeiler hva et kommandobeskyttelse handler om. Den har svært interessante egenskaper utover de kjente Unix-skjellene, og det er et sterkt økosystem og fellesskap.
I denne todelte opplæringen lærer du om noen av de kule tingene du kan gjøre med PowerShell, dens historie, dens arkitektur, dens konsepter og hvordan den sammenlignes med et Unix-skall som Bash. Gjør deg klar for en spennende reise!
Hvis du er på Windows 10, er du god til å gå. Ellers kan du laste den ned fra Microsofts nettside.
Når PowerShell er installert, er det første du vil gjøre, å aktivere scriptutførelse. Start PowerShell som administrator og skriv inn: Set-ExecutionPolicy RemoteSigned
. Du må gjøre det bare en gang. Oppdater nå hjelpefilene: Oppdater-Hjelp-Forbedre
.
La oss starte med en rask demonstrasjon av bredden og dybden av PowerShell. Dette er bare en noe tilfeldig liste for å appetitere. Det er ikke omfattende, og det er heller ikke nødvendigvis de mest imponerende tingene du kan gjøre med PowerShell.
Her er en kul en-liner for å spille av videofiler (eller en hvilken som helst mediefil):
(Nytt objekt -COM WMPlayer.OCX) .openPlayer ("Path to your video")
Det åpner et mediaspillervindu og begynner å spille videoen din umiddelbart.
PowerShell har en av de mest lesbare og visuelt tiltalende løsningene på multi-line-strenger, AKA "her strenger". Du begynner bare med @"
og avslutt med "@
. Merk at start- og sluttmarkørene må være på egen linje, adskilt fra innholdet i mellom. Her er et eksempel:
$ x = "@ 123 456 789 @"
Velg et tilfeldig tall mellom 1 og 100:
1 ... 50 | Get-Random
Dette er en enkel rørledning. Den venstre side kan generere alle heltallene fra 1 til 50 (inkluderende), og så blir den matet til den tilfeldig cmdlet som plukker en av dem.
PowerShell støtter utklippstavlen i dybden. Du kan få og sette objekter av forskjellige formater. Tydeligvis er ren tekst mulig, men du kan også arbeide med bilder, HTML, RTF og til og med filer.
Her velger jeg noen filer i explorer og så får jeg dem fra utklippstavlen i PowerShell:
23:43:05 C: \ Brukere \ the_g> Get-Utklippstavlen -Filer Mode LastWriteTime Lengde Navn ---- ------------- ------ ---- -a ---- 9/15/2016 11:41 135890 Capture.PNG -a ---- 9/16/2016 10:09 PM 3179548 20160917_110605.jpg -a ---- 16.9.2012 16:09 PM 4623977 20160917_110734.jpg
PowerShell kan også snakke!
Add-Type -AssemblyName System.speech $ synth = Ny-Object -TypeName System.Speech.Synthesis.SpeechSynthesizer $ synth.Speak ("PowerShell to the people")
Her er en liten rørledning for å liste alle de kjørende virtuelle maskinene:
Get-VM | Hvor-objekt $ _. State -eq "Running"
PowerShell kan vise en fin fremdriftslinje under lange operasjoner. Her er et eksempel som beregner rekursivt totalstørrelsen på alle filene under gjeldende katalog:
$ files = Get-ChildItem. -Recurse $ total = 0 For ($ i = 1; $ i -le $ files.Count-1; $ i ++) Skriv-Fremgang -Aktivitet "Beregner total størrelse ..." -status $ filer [$ i] .Name - PercentComplete ($ i / $ files.Count * 100) $ totalt + = $ filer [$ i] .Lengde Start-Sleep -Milliseconds 50 Skriv-Host "Total størrelse: $ ($ total / 1 MB)"
PowerShell 1.0 ble utgitt i 2006, men oppfinneren Jeffery Snover begynte å jobbe med det mye tidligere. Sjekk ut 2002-manifestet. PowerShell har kommet langt. Windows var langt borte når det gjelder kommandolinjemuligheter. Systemadministratorer og strømbrukere måtte gjøre med de små tilbudene til cmd.exe og batch-filer. Det var noen svake forsøk på å forbedre situasjonene med Windows scripting-verter som tillot skriptystemobjekter ved hjelp av VBScript eller JScript, men det er mange problemer med denne tilnærmingen.
PowerShell endret alt det og veldig raskt. Det passet ikke bare kommandolinjemulighetene til * nix-miljøer, men sprang fremover med mange innovasjoner og enestående konsistens og brukervennlighet..
I dag er PowerShell på versjon 5.1. I løpet av årene og versjoner vokste PowerShells evner og vertsmiljøer betydelig.
PowerShell 1.0 støttet lokaladministrasjon av Windows-maskiner (inkludert Windows Server 2003).
PowerShell 2.0 ble integrert med Windows 7 og Windows Server 2008 R2. Den har lagt til støtte for fjernkontroll og betydelig økt mulighetene til PowerShell med bakgrunnsoppgaver, transaksjoner, hendelser, feilsøking, et GUI-utviklingsmiljø og mange nye cmdlets.
PowerShell 3.0 ble utgitt som en del av Windows Management Framework. Den ble installert på Windows 8 og Windows Server 2012. Den la til planlagte jobber, øktkobling, automatisk lasting av moduler og mange nye kommandoer.
PowerShell 4.0 ble integrert med Windows 8.1 og Windows Server 2012 R2. Den lagde til støtte for ønsket tilstandskonfigurasjon, forbedret feilsøking, nettverksdiagnostikk og -PipelineVariable
bytte om.
PowerShell 5.0 ble utgitt som en del av Windows Management Framework 5. PowerShell 5.1 ble utgitt som en del av Windows 10 jubileum oppdateringer. Nye funksjoner inkluderer PowerShell klassen definisjoner,. NET oppsummeringer, fjerning av feilsøking og feilsøking bakgrunnsoppgaver, DSC lokal konfigurasjonsbehandling, og mange flere DSC forbedringer.
PowerShell er et veldig kraftig programmeringsspråk. Det kan selvfølgelig løpe skript, men det har også mer avanserte mekanismer som moduler, egendefinerte cmdletter og klasser. PowerShell er et multi-paradigm språk som støtter objektorienterte, funksjonelle og prosessoriske paradigmer.
Men kanskje det viktigste aspektet av PowerShell er at det er et fullverdig .NET-språk. Det oppretter og bruker. NET-forsamlingsobjekter programmert på hvilket språk som helst, og objekter som går gjennom PowerShells pipeline er .NET-objekter. PowerShell er også sterkt skrevet, men når det er praktisk kan du ignorere det, og du trenger ikke å spesifisere typene hvis du ikke vil.
For å programmere prosedyrisk, trenger du funksjoner, kondisjoner og looper. PowerShell har alt det. Sammenligningsoperatørene kan overraske deg fordi de ikke bruker de typiske symbolene. I stedet har du: -ekv
(lik), -lt
(mindre enn), -gt
(større enn), -ge
(større eller lik), osv.
Her er et betinget logisk eksempel som får innspill fra brukeren og bekrefter at den er gyldig. Legg merke til bruken av -som
operatør for å prøve å konvertere inngangen til et heltall. Hvis det mislykkes, er resultatet $ null
.
$ value = 44 $ in = Read-Host "Gjett et tall mellom 1 - 100" $ guess = $ i -as [int] hvis ((($ guess -eq $ null) -eller ($ gjett -lt 1)) -or ($ guess -gt 100)) Write-Host "$ gjetning er IKKE et helt tall mellom 1 - 100" Exit hvis ($ gjett-verdi $ verdi) Skriv-Host "du vinn!" elseif ($ guess -lt $ value) Write-Host "For lav" ellers Write-Host "For høy"
PowerShell har mange fasiliteter og cmdletter å jobbe med samlinger og skive og terninger dem, slik at sløyfer ikke trengs ofte. Men bare hvis du er så tilbøyelig, er det nok av loopy-konstruksjoner i PowerShell. Du kan bruke For looper, ForEach looper, While Loops, Do-While Loops, og til og med spesielle ForEach-Object looper. Her er noen eksempler.
For $ ($ i = 0; $ i-100, $ i + = 20) $ i 0 20 40 60 80 $ list = 1 ... 5 ForEach ($ element i $ liste) $ item * 3 3 6 9 12 15 $ senere = $ (Get-Date) .AddSeconds (5) mens ($ (Get-Date) -lt $ senere) "Er vi der ennå?" sove 1 PS C: \ WINDOWS \ system32> $ senere = $ (Get-Date) .AddSeconds (5) mens ($ (Get-Date) -lt $ senere) "Er vi der ennå?" sov 1 Er vi der ennå? Er vi der ennå? Er vi der ennå? Er vi der ennå? Er vi der ennå?
PowerShell handler om funksjonell programmering. Rørledningen er et funksjonelt utførelsesmiljø hvor du komponerer funksjoner / cmdlets dynamisk. Du kan gjøre det interaktivt eller du kan gjøre i et skript. Hvis du vil gjøre eksplisitt funksjonell programmering, kan du også gjøre det, men syntaksen er litt tungvint. Sjekk ut denne artikkelen: Funksjonell programmering i PowerShell.
Du har allerede sett hvordan du bruker .NET objekter og objekter som går gjennom rørledningen. La oss definere en klasse i PowerShell og gjøre noen grunnleggende OO. Jeg lager her en klasse for et spillkarakter med helse og rustning som kan ta skade og beregne helsen. Det er også en Er i live()
metode som sjekker om helse> 0. Jeg bruker en konstruktør.
Legg merke til at du må sette opp PowerShell-klasser ved hjelp av [
. Syntaksen for nye objekt støttes ikke av PowerShell 5.1.
Klasse Karakter [streng] $ Navn [int] $ Helse [int] $ AttackDamage [float] $ Armor Character ([streng] $ navn, [int] $ helse, [int] $ attackDamage, [float] $ rustning) $ this.Name = $ name $ this.Health = $ helse $ this.AttackDamage = $ attackDamage $ this.Armor = $ rustning [bool] IsAlive () return $ this.Health -gt 0 [void] TakeDamage $ $ = $ skade $ c = [Character] :: ny ("xxx", 50, 10, 1.0) $ c.TakeDamage (20) $ c.IsAlive () True $ c.Health 38 $ c.TakeDamage (40) $ c.Health 14 $ c.TakeDamage 40) $ c. Helse -10 $ c.IsAlive () False
Du kan til og med gjøre arv hvis du vil, men jeg føler at du på dette punktet sannsynligvis skal bruke et annet språk.
PowerShell kommer med sin egen IDE for skriptutvikling som inkluderer et interaktivt vindu, multi-tabbed for skript med kodeavslutning, innebygd hjelp på alle cmdlets og mye mer. Det er et veldig smart verktøy, og jeg anbefaler at du gir den en prøve.
Du har nå sett kapasiteten til PowerShell som skriptspråk og lært litt om dens designmål og dens historie. I del to, vil jeg dekke de interaktive aspektene av PowerShell i dybden.