I del ett viste jeg deg noen kule ting du kan gjøre med PowerShell, dekket historien til PowerShell, og utforsket i dybden mulighetene til PowerShell som et sterkt skriptspråk som støtter prosessorisk, funksjonell og objektorientert programmering.
I del to diskuterer jeg det interaktive skallet, profilen og spørringen, og jeg sammenligner PowerShell med Bash.
PowerShell ble designet fra get-go som et interaktivt skall for Windows sys admins og strømbrukere. Det fokuserer på et lite antall konsepter, veldig konsekvent erfaring, og en objektrørledning for å kjede og kombinere kommandoer, filtrere dem og formater dem. Dens sterke hjelpesystem, som også overholder et konsistent format, er en glede å bruke.
La oss se noe av det i aksjon.
Det omfattende hjelpesystemet er tilgjengelig gjennom Få hjelp
.
PS C: \ WINDOWS \ system32> Hjelp Invoke-WebRequest NAME Invoke-WebRequest SYNOPSIS Går innhold fra en nettside på Internett. SYNTAX Invoke-WebRequest [-Uri][-Kropp
For å få mer detaljert hjelp og se eksempler, bruk de riktige bryterne: -eksempler
, -detaljer
, eller -full
.
Hvis du ikke er sikker på hva kommandoenavnet er, bruk bare søkeord og PowerShell vil vise deg alle tilgjengelige kommandoer som inneholder dette søkeordet. La oss se hvilke cmdlets relatert til CSV er tilgjengelige:
PS C: \ Brukere \ the_g> Get-Help -Category Cmdlet csv | velg navn Navn ---- ConvertFrom-CSV ConvertTo-CSV Export-CSV Import-CSV
Jeg opprettet en liten rørledning der jeg begrenset Get-Help-anropet bare til kategorien Cmdlet, og deretter pipet det til "select" (alias for Select-Object) for å bare få navnet "egenskapen".
Du kan gjøre stort sett alt du er vant til: å navigere til ulike kataloger, noteringsfiler og underkataloger, undersøke innholdet i filer, lage kataloger og filer, osv..
PS C: \ Brukere \ the_g> mkdir test_dir | velg navn Navn ---- test_dir PS C: \ Brukere \ the_g> cd. \ test_dir PS C: \ Brukere \ the_g \ test_dir> "123"> test.txt PS C: \ Brukere \ the_g \ test_dir> ls | navn Navn ---- test.txt PS C: \ Brukere \ the_g \ test_dir> get-content. \ test.txt 123
Med PowerShell kan du behandle mange ting som filsystemer og navigere dem med cd
og kontroller innholdet ved hjelp av ls / dir
. Her er noen andre leverandører:
Leverandør Diskdatabutikk -------- ----- ---------- Alias Alias: Windows PowerShell alias Sertifikatcert: x509 sertifikater for digitale signaturer Miljø Env: Windows miljøvariabler Funksjon Funksjon: Windows PowerShell funksjoner Register HKLM :, HKCU: Windows-register Variabel variabel: Windows PowerShell-variabler WSMan WSMan: WS-Management-konfigurasjonsinformasjon
La oss sjekke ut miljøet og se hvilke Go-relaterte miljøvariabler som er der ute (på min maskin):
PS C: \ Brukere \ the_g> ls env: GO * Navn Verdi ---- ----- GOROOT C: \ GO \ GOPATH C: \ Brukere \ the_g \ Documents \ Go
PowerShell oppfordrer til å komponere cmdlets med standardbrytere og lage rørledninger. Formatering er et eksplisitt konsept hvor du i slutten av en rørledning setter en formatter. PowerShell undersøker som standard typen objekt eller objekter i enden av røret og bruker en standardformater. Men du kan overstyre det ved å spesifisere en formatter selv. Formatterer er bare cmdlets. Her er den forrige utgangen som vises i listformat:
PS C: \ Brukere \ the_g> ls env: GO * | Format-List Name: GOROOT Verdi: C: \ Go \ Name: GOPATH Verdi: c: \ Brukere \ the_g \ Documents \ Go
Kraftbrukere som bruker kommandolinjen, har ofte mange oppgaver, rørledninger og favorittkombinasjoner av kommandoer med standardbrytere som de favoriserer. PowerShell-profilen er en PowerShell-skriptfil som lastes og utføres når du starter en ny økt. Du kan sette alle dine favorittverdier der, lage aliaser og funksjoner, angi miljøvariabler, og stort sett alt annet.
Jeg liker å lage navigasjonsalliaser til dypt nestede kataloger, aktivere virtuelle Python-miljøer, og lag snarveier til eksterne kommandoer som jeg kjører ofte, som git og docker.
For meg er profilen uunnværlig fordi PowerShells svært lesbare og konsekvente kommandoer og svitsjer ofte er for omfattende, og de innebygde aliasene er ofte mer problemer enn hjelp (jeg diskuterer dette senere). Her er en veldig delvis utdrag fra profilen min:
# --------------------------- # # DOCKER # # ----------------- ---------- Set-Alias -Name d -Value dockerfunksjon di d bilder # ------------------------ --- # # GIT # # --------------------------- Set-alias -Name g -Value git-funksjonen gs g status funksjon gpu g pull --rebase # ------------------------- # # CONDA # # ---------- --------------- funksjon en activate.ps1 $ args [0] # ---------------------- - # # NAVIGASJON # # ------------------------ funksjon cdg cd $ github_dir # MVP funksjon cdm a ov; cdg; cd MVP # backend-funksjon cdb a ov; cdg; CD backend # scratch-funksjon CDer a ov; cdg; cd scratch # backend pakker funksjon cdbp cdb; cd-pakker # Gå arbeidsområdefunksjon cdgo cd $ go_src_dir
PowerShell lar deg tilpasse kommandoprompten din. Du må definere en funksjon som kalles prompt ()
. Du kan se den innebygde hurtigfunksjonen:
PS C: \ Brukere \ the_g> gc funksjon: 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: \ Brukere \ the_g>
Her er en tilpasset hurtigfunksjon som viser gjeldende tid i tillegg til gjeldende katalog:
PS C: \ Users \ the_g> funksjonsprompten "$ (get-date) $ (get-location)>"
10/09/2016 12:42:36 C: \ Users \ the_g>
Du kan selvfølgelig gå vill og legge til farger og kontrollere forskjellige forhold som om du er i et bestemt git-repository eller hvis du er admin.
PowerShell fikk aliaser feil, etter min mening, på to separate fronter. Først alias
kommandoen tillater bare omdøping av kommandoer. Du kan ikke legge til vanlige flagg eller alternativer for å gjøre kommandoer mer nyttige ved å aliasing dem til seg selv.
Hvis du for eksempel vil søke i tekstlinje for linje, kan du bruke Velg-streng
cmdlet:
# Lag en liten tekstfil med 3 linjer "@ ab cd ef @"> 1.txt # Søk etter en linje som inneholder d Get-Content 1.txt | Velg-streng d cd
Det fungerer, men mange vil gjerne gi nytt navn Velg-streng
til grep
. Men grep
er som standard saksfølsom, mens Velg-streng
er ikke. No big deal-vi vil bare legge til -CaseSensitive
flagg, som i:
Set-Alias-Name grep -Value "Select-String -CaseSensitive"
Dessverre fungerer det ikke:
16:19:26 C: \ Users \ the_g> Get-Content 1.txt | grep D grep: Begrepet 'Select-String -CaseSensitive' blir ikke gjenkjent som navnet på en cmdlet, funksjon, skriptfil eller operativt program. Kontroller stavemåten til navnet, eller hvis en sti var inkludert, bekreft at stien er riktig og prøv igjen. På linje: 1 kar: 21 + Get-Content 1.txt | grep D + ~~~~ + KategoriInfo: ObjectNotFound: (Select-String -CaseSensitive: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
Verdien av et alias må være enten en cmdlet, en funksjon, et skript eller et program. Ingen flagg eller argumenter er tillatt.
Nå kan du gjøre det veldig enkelt i PowerShell, men du må bruke funksjoner og ikke aliaser. Det begrenser ganske mye aliaser til enkel omdøping, som også kan gjøres av funksjoner.
På den interaktive skallsiden er PowerShell og Bash ganske like. Bash er mer konsistent som standard, men PowerShells objektrørledning gjør kompliserte rørledninger mer håndterbare. ,
Når det er sagt, kan du nok oppnå noe med en, og hvis du er en strømbruker, har du egne aliaser, funksjoner og snarveier for vanlige oppgaver. På skriptiden går PowerShell langt utover Bash, og for systemadministrasjonsformål slår det til og med Python, Ruby og venner.
Et viktig aspekt er tilgjengeligheten. Bash kommer forhåndsinstallert med de fleste * nix-distribusjoner (med mindre spesielt strippet), inkludert macOS. Den kan også installeres på Windows via cygwin, git-bash eller msys. PowerShell kommer forhåndsinstallert på Windows og ble nylig tilgjengelig på Mac og Linux.
Hvis du bruker Windows som en utviklingsmaskin, eller hvis du styrer Windows-maskiner, er PowerShell et uunnværlig verktøy. Det er virkelig et godt gjennomtenkt supersett av Unix-skallene, og det kommer forhåndsinstallert.
PowerShell er flott programvareutvikling på jobb. Det utviklet seg over et tiår, og det ble innovativt samtidig som den opprettholde sin opprinnelige konseptuelle integritet. Nylig bytte til åpen kildekode og kryssplattform signalerer at det fortsatt er mye mer å vente på.