Geek School Lær å bruke Cmdlets i PowerShell
Hvis du har brukt ipconfig eller ping gjennom kommandoprompten, er du halvveis til å bli en PowerShell ninja. Så kom og bli med oss da vi oppdager cmdlets i denne installasjonen av Geek School.
Pass på å sjekke ut vår første artikkel som introduserer PowerShell, og hold deg innstilt for resten av serien hele uken.
Anatomien til en Cmdlet
I den første delen av serien så vi en cmdlet som så ut slik:
Update-Help
PowerShell cmdlets har en Verb-Noun syntaks, som kan sees over. Det viktige å merke seg er at substantivet alltid er entall, selv om cmdletet kan returnere mer enn ett resultat. For å se en liste over juridiske verb i PowerShell kan du bruke Get-Verb cmdlet.
Å vite de juridiske verbene og huske singular substantivregelen bidrar virkelig til å gjette cmdlet-navn. For eksempel, anta at du vil få en liste med tjenester og deres status - det er riktig, det er så enkelt som Get-Service. Hvordan tror du vi ville få en liste over kjører prosesser - Det er riktig, Get-Process vil gjøre trikset.
Get-Process
Dette gjør det veldig enkelt å arbeide med hvilken som helst teknologi. Hvis du for eksempel hadde lastet inn cmdlets for Exchange, kunne vi enkelt få en liste over postkasser på serveren ved å bruke:
Get-Mailbox
Det er imidlertid et unntak. Bytt til side, vil alle andre teknikkspesifikke kommandoer kreve et prefiks. For eksempel, hvis vi ønsket å få brukerne som for øyeblikket er logget på via Eksternt skrivebord, skriver vi:
Get-RDUserSession
Som kan ses i skjermbildet nedenfor.
Merk: Dette skjermbildet ble tatt på en Server 2012-boks som det er der du skal finne de fleste av de teknikkspesifikke modulene.
For en stund siden leste jeg en artikkel av Don Jones, Godfather of PowerShell, der han forklarte at Exchange sendt før dette prefikset ble lagt til cmdlets, så det implementerte dem aldri og vil aldri.
aliaser
En annen funksjon som PowerShell kommer med, er muligheten til å ha flere måter å kjøre de samme kommandoaliasene, hvis du vil. Den fantastiske tingen om dem er at de inneholdt mange kommandoer du kanskje hadde brukt i ledeteksten, samt noen Linux-aliaser. I PowerShell kan vi for eksempel få en katalogoppføring ved å bruke:
Get-ChildItem
Brukes til å bruke kommandoprompten? Ikke bekymre deg, de har dekket deg.
Har du en Linux-bakgrunn? De har du dekket der også.
Når du har skriptet i et par år, har du en tendens til å bli lat og begynner å bruke aliaser mye, men dette hjelper ikke nykommere som kommer til å lese vår kode. For å se hvilken kommando et alias kjører under hetten, kan du bruke følgende:
Hent-alias-navn ls
På den annen side, hvis du føler at det er på tide å styre spillet ditt, kan du bruke definisjonsparameteren til å få alle aliaser for en cmdlet:
Get-ChildItem-Definisjon Get-ChildItem
Hvis du kommer fra en annen bakgrunn, kan du legge til dine egne aliaser ved å gjøre følgende:
Nytt alias-navn icanhazfilez -Value Get-ChildItem
Åpenbart må du erstatte "icanhazfilez" med navnet på ditt nye alias og Get-ChildItem med cmdleten du vil at den skal løpe under hetten.
En ting å merke seg er at du mister alle aliasene du har definert når du lukker skallet. Du kan komme seg rundt dette ved å legge til definisjonen i profilskriptet ditt.
Trunkering Parametre
Windows PowerShell lar deg også avkorte parameternavn til det punktet de blir tvetydige, det vil si til det punktet hvor PowerShell ikke lenger kan finne ut hvilken parameter du snakker om. For eksempel:
Get-Service-Navnet 'Apple Mobile Device' -ComputerName localhost
Er det samme som:
Get-Service -Na 'Apple Mobile Device' - på localhost
Hvis du ved en tilfeldighet gjør parametrene navnene for tvetydige, vil du få en feil.
Legacy Commands
Til slutt vil de kommandoene du kjenner og elsker, fortsatt fungere i PowerShell.
ping www.google.com
Bare husk at eldre programmer som ping utfører en streng, og det er ofte en bedre måte å gjøre det samme ved hjelp av en PowerShell-cmdlet.
I stedet for å legge ut en lang tekststreng, er vi nå igjen med et objekt, som vi vil se på i morgendagens utgave av Geek School.