Geek School Lær at bruge Cmdlets i PowerShell
Hvis du har brugt ipconfig eller ping gennem kommandoprompten, er du halvvejs til at blive en PowerShell ninja. Så kom og kom med os, da vi opdager cmdlets i denne installation af Geek School.
Sørg for at tjekke vores første artikel, der introducerer PowerShell, og hold dig indstillet til resten af vores serie hele ugen.
Anatomien af en Cmdlet
I serieens første del så vi en cmdlet, der så noget sådan ud:
Opdatering-Help
PowerShell cmdlets har en Verb-Noun syntaks, som kan ses ovenfor. Det vigtige at bemærke er, at substantivet altid er entydigt, selvom cmdletet måske returnerer mere end et resultat. For at se en liste over juridiske verb i PowerShell kan du bruge Get-Verb cmdlet.
At kende de juridiske verb og huske singular navne regel hjælper virkelig gætte cmdlet navne. Antag for eksempel at du vil få en liste over tjenester og deres status - det er rigtigt, det er lige så nemt som Get-Service. Hvordan tror du, at vi ville få en liste over løb processer - Det er rigtigt, Get-Process vil gøre tricket.
Get-Proces
Dette gør det virkelig nemt at arbejde med enhver teknologi. For eksempel, hvis du havde indlæst Exchange cmdlets, kunne vi nemt få en liste over postkasser på serveren ved at bruge:
Get-Mailbox
Der er dog en undtagelse. Udveksling til side, vil alle andre teknologiske specifikke kommandoer kræve et præfiks. For eksempel, hvis vi ønskede at få de brugere, der for øjeblikket er logget på via Remote Desktop, ville vi skrive:
Get-RDUserSession
Som kan ses i skærmbilledet nedenfor.
Bemærk: Dette skærmbillede blev taget på en Server 2012-boks, da det er her, du skal finde de fleste af de teknologiske specifikke moduler.
For en tid siden læste jeg en artikel af Don Jones, Godfather of PowerShell, hvor han forklarede, at Exchange blev sendt før dette præfiks blev tilføjet til cmdlets, så det implementerede dem aldrig og vil aldrig.
aliasser
En anden funktion, PowerShell kommer med, er evnen til at have flere måder at køre de samme kommandoaliaser, hvis du vil. Den fantastiske ting ved dem er, at de indeholdt mange kommandoer, du måske har brugt i kommandoprompten, samt nogle Linux-aliaser. I PowerShell kan vi f.eks. Få en katalogfortegnelse ved at bruge:
Get-ChildItem
Bruges til at bruge kommandoprompten? Bare rolig, de har du dækket.
Har du en Linux-baggrund? De har du dækket der også.
Når du har skrevet script i et par år, har du tendens til at blive doven og begynder at bruge aliaser meget, men det hjælper ikke nytilkomne, som vil læse vores kode. For at se, hvilken kommando et alias kører under emhætten, kan du bruge følgende:
Få-alias-navn ls
På den anden side, hvis du føler, at det er på tide at træde dit spil op, kan du bruge definitionparameteren til at få alle aliaser til en cmdlet:
Get-ChildItem-Definition Get-ChildItem
Hvis du kommer fra en anden baggrund, kan du tilføje dine egne aliaser ved at gøre følgende:
Ny-alias -Name icanhazfilez -Value Get-ChildItem
Selvfølgelig skal du erstatte "icanhazfilez" med navnet på dit nye alias og Get-ChildItem med cmdleten, du vil have det til at løbe under emhætten.
En ting at bemærke er, at du mister alle de aliaser, du har defineret, når du lukker skallen. Du kan komme rundt ved at tilføje deres definition til dit profil script.
Trunkerende parametre
Windows PowerShell giver dig også mulighed for at afkorte parameternavne indtil det punkt, hvor de bliver tvetydige, det vil sige indtil det punkt, hvor PowerShell ikke længere kan finde ud af, hvilken parameter du taler om. For eksempel:
Get-Service-Navnet 'Apple Mobile Device' -computernavn localhost
Er det samme som:
Get-Service -Na 'Apple Mobile Device' - på localhost
Hvis du med en chance gør parametrene navne for tvetydige, får du en fejl.
Legacy Commands
Endelig arbejder de kommandoer, du kender og elsker, stadig i PowerShell.
ping www.google.com
Bare husk at gamle programmer som ping output en streng, og der er ofte en bedre måde at gøre det samme ved hjælp af en PowerShell-cmdlet.
I stedet for at udstede en lang tekststreng er vi nu tilbage med et objekt, som vi vil se på i morgendagens udgave af Geek School.