I del ett visade jag dig några coola saker du kan göra med PowerShell, täckte PowerShells historia och utforskade djupt PowerShells möjligheter som ett starkt skriptspråk som stöder procedur, funktionell och objektorienterad programmering.
I del två ska jag diskutera det interaktiva skalet, profilen och prompten, och jag ska jämföra PowerShell till Bash.
PowerShell designades från get-go som ett interaktivt skal för Windows-systemansvariga och strömanvändare. Det fokuserar på ett litet antal koncept, mycket konsekvent erfarenhet och en objektpipeline för att kedja och kombinera kommandon, filtrera dem och formatera dem. Dess starka hjälpsystem, som också följer ett konsekvent format, är ett nöje att använda.
Låt oss se lite av det i åtgärd.
Det omfattande hjälpsystemet är tillgängligt via Få hjälp
.
PS C: \ WINDOWS \ system32> Hjälp Invoke-WebRequest NAME Invoke-WebRequest SYNOPSIS Hämtar innehåll från en webbsida på Internet. SYNTAX Invoke-WebRequest [-Uri][-Kropp
För att få mer detaljerad hjälp och se exempel, använd de korrekta omkopplarna: -exempel
, -detaljer
, eller -full
.
Om du inte är säker på vad kommandonamnet är, använd bara nyckelord och PowerShell visar alla tillgängliga kommandon som innehåller det här sökordet. Låt oss se vilka cmdlets som är relaterade till CSV är tillgängliga:
PS C: \ Användare \ the_g> Get-Help -Category Cmdlet csv | välj namn Namn ---- ConvertFrom-Csv ConvertTo-Csv Export-Csv Import-Csv
Jag skapade en liten pipeline där jag begränsade Get-Help-samtalet bara till kategorin Cmdlet och ledde sedan det till "select" (alias för Select-Object) för att bara få namnet "property".
Du kan göra ganska mycket allt du är van att: navigera till olika kataloger, listfiler och underkataloger, granska innehållet i filer, skapa kataloger och filer, etc..
PS C: \ Users \ the_g> mkdir test_dir | välj namn Namn ---- test_dir PS C: \ Användare \ the_g> cd. \ test_dir PS C: \ Användare \ the_g \ test_dir> "123"> test.txt PS C: \ Användare \ the_g \ test_dir> ls | namn Namn ---- test.txt PS C: \ Användare \ the_g \ test_dir> get-content. \ test.txt 123
Med PowerShell kan du behandla många saker som filsystem och navigera dem med CD
och kontrollera innehållet med ls / dir
. Här är några ytterligare leverantörer:
Provider Drive Data Store -------- ----- ---------- Alias Alias: Windows PowerShell-alias Certifikatcertifiering: x509-certifikat för digitala signaturer Miljö Env: Windows-miljövariabler Funktionsfunktion: Windows PowerShell funktioner Registry HKLM :, HKCU: Windows-registret Variabelvariabel: Windows PowerShell-variabler WSMan WSMan: WS-Management-konfigurationsinformation
Låt oss kolla miljön och se vilka Go-relaterade miljövariabler finns där ute (på min maskin):
PS C: \ Användare \ the_g> ls env: GO * Namn Värde ---- ----- GOROOT C: \ GO \ GOPATH C: \ Användare \ the_g \ Documents \ Go
PowerShell uppmuntrar att komponera cmdlets med standardbrytare och skapa pipelines. Formatering är ett uttryckligt koncept där du i slutet av en pipeline lägger en formaterare. PowerShell undersöker som standard typen av objekt eller objekt i slutet av röret och tillämpar en standardformaterare. Men du kan åsidosätta det genom att ange en formaterare själv. Formateringar är bara cmdlets. Här är den tidigare utmatningen som visas i listformat:
PS C: \ Användare \ the_g> ls env: GO * | Format-List Name: GOROOT Värde: C: \ Go \ Name: GOPATH Värde: c: \ Användare \ the_g \ Documents \ Go
Kraftanvändare som ofta använder kommandoraden har många uppgifter, pipelines och favoritkombinationer av kommandon med standardväxlar som de föredrar. PowerShell-profilen är en PowerShell-skriptfil som laddas och körs när du startar en ny session. Du kan lägga alla dina favoritgodis där, skapa aliaser och funktioner, ställa in miljövariabler och nästan allt annat.
Jag gillar att skapa navigeringsalias till djupt kapslade kataloger, aktivera virtuella Python-miljöer och skapa genvägar till externa kommandon som jag kör ofta, som git och docker.
För mig är profilen oumbärlig eftersom PowerShells läsliga och konsekventa kommandon och omkopplare ofta är för stora och de inbyggda aliaserna är ofta mer problem än hjälp (jag diskuterar detta senare). Här är ett mycket partiellt utdrag ur min profil:
# --------------------------- # # DOCKER # # ----------------- ---------- Set-Alias -Name d -Value dockerfunktionen di d bilder # ------------------------ --- # # GIT # # --------------------------- Set-alias -Name g -Value git-funktionen gs g status funktion gpu g pull --rebase # ------------------------- # # CONDA # # ---------- --------------- funktion a activate.ps1 $ args [0] # ---------------------- - # # NAVIGATION # # ------------------------ funktion cdg cd $ github_dir # MVP funktion cdm a ov; cdg; cd MVP # backend-funktion cdb a ov; cdg; cd backend # scratch function cd-skivor a ov; cdg; cd-skrapa # backend-paketfunktioner cdbp cdb; cd-paket # Gå på arbetsområdet cdgo cd $ go_src_dir
PowerShell låter dig anpassa kommandotolken. Du måste definiera en funktion som heter prompt()
. Du kan se den inbyggda snabbfunktionen:
PS C: \ Användare \ the_g> gc funktion: prompt "PS $ ($ executionContext.SessionState.Path.CurrentLocation) $ ('>' * ($ nestedPromptLevel + 1))"; # .Link # http://go.microsoft.com/fwlink/?LinkID=225750 # .ExternalHelp System.Management.Automation.dll-help.xml PS C: \ Användare \ the_g>
Här är en anpassad snabbfunktion som visar aktuell tid utöver den aktuella katalogen:
PS C: \ Users \ the_g> funktionsprompten "$ (get-date) $ (get-location)>"
10/09/2016 12:42:36 C: \ Users \ the_g>
Du kan naturligtvis gå vild och lägga till färger och kontrollera olika förhållanden som om du är i ett visst gitförteckning eller om du är administratör.
PowerShell fick fel, enligt min mening, på två separata fronter. Först, det alias
kommandot tillåter bara att byta namn på kommandon. Du kan inte lägga till vanliga flaggor eller alternativ för att göra kommandon mer användbara genom att aliasing dem till sig själva.
Om du till exempel vill söka i textrad efter rad kan du använda Välj-String
cmdlet:
# Skapa en liten textfil med 3 rader "@ ab cd ef @"> 1.txt # Sök efter en rad som innehåller d Get-Content 1.txt | Select-String d cd
Det fungerar, men många skulle vilja byta namn Välj-String
till grep
. Men grep
är som standard skiftlägeskänslig medan Välj-String
är inte. Ingen stor sak - vi lägger bara till -Skiftlägeskänsliga
flagga, som i:
Set-alias -Name grep -Value "Select-String -Case Sensitive"
Tyvärr fungerar det inte:
16:19:26 C: \ Users \ the_g> Get-Content 1.txt | grep D grep: Termen 'Select-String -Case Sensitive' känns inte igen som namnet på en cmdlet, funktion, skriptfil eller operativt program. Kontrollera stavningen av namnet, eller om en sökväg var med, kontrollera att sökvägen är korrekt och försök igen. På rad: 1 char: 21 + Get-Content 1.txt | grep D + ~~~~ + CategoryInfo: ObjectNotFound: (Select-String -CaseSensitive: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
Värdet av ett alias måste vara antingen en cmdlet, en funktion, ett manus eller ett program. Inga flaggor eller argument är tillåtna.
Nu kan du göra det mycket enkelt i PowerShell, men du måste använda funktioner och inte alias. Det begränsar ganska mycket alias till enkel omdämning, vilket också kan göras av funktioner.
På den interaktiva skalsidan är PowerShell och Bash ganska lika. Bash är mer koncis som standard, men PowerShells objektrörledning gör komplicerade rörledningar mer hanterbara. ,
Med det sagt kan du förmodligen uppnå någonting med någon och om du är en maktanvändare har du egna aliaser, funktioner och genvägar för vanliga uppgifter. På skriptsidan går PowerShell långt bortom Bash, och för systemadministrationsändamål slår det till och med Python, Ruby och vänner.
En viktig aspekt är tillgängligheten. Bash kommer förinstallerat med de flesta * nix-distributioner (om inte specifikt strippas) inklusive macOS. Det kan också installeras på Windows via cygwin, git-bash eller msys. PowerShell kommer förinstallerad på Windows och blev nyligen tillgänglig på Mac och Linux.
Om du använder Windows som en utvecklingsmaskin eller om du hanterar Windows-maskiner är PowerShell ett oumbärligt verktyg. Det är verkligen en väl genomtänkt superset av Unix-skalen, och den kommer förinstallerad.
PowerShell är bra programvaruteknik på jobbet. Det utvecklades under ett decennium, och det var innovativt samtidigt som man behöll sin ursprungliga konceptuella integritet. Den senaste omställningen till öppen källkod och plattform signalerar att det fortfarande finns mycket mer att vänta på.