10Aug
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.
Husk at tjekke vores første artikel, der introducerer PowerShell, og hold øje med resten af vores serie hele ugen.
Anatomi af en Cmdlet
I den første del af serien så vi en cmdlet, der så noget sådan ud:
Update-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 substantivreglen hjælper virkelig med at gætte cmdletnavne. 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 kørende -processer - det er rigtigt, Get-Process vil gøre tricket.
Get-Process
Dette gør det meget nemt at arbejde med enhver teknologi. Hvis du f.eks. 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 er logget på via Remote Desktop, skulle vi skrive:
Get-RDUserSession
Som kan ses på 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.
Aliases
En anden funktion, PowerShell leveres 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. For eksempel kan vi i PowerShell få en katalogfortegnelse ved at bruge:
Get-ChildItem
Bruges til at bruge kommandoprompten? Bare rolig, de har du dækket.
Har 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, der vil læse vores kode. For at se, hvilken kommando et alias kører under emhætten, kan du bruge følgende:
Get-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 for en cmdlet:
Get-ChildItem-Definitions Get-ChildItem
Hvis du kommer fra en anden baggrund, kan du tilføje dine egne aliaser ved at gøre følgende:
New-Alias -Name icanhazfilez -Value Get-ChildItem
Selvfølgelig,du bliver nødt til at erstatte "icanhazfilez" med navnet på dit nye alias og Get-ChildItem med den cmdlet, du vil have den 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.
Afkortningsparametre
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 ved en chance gør parametrene navne for tvetydigevil få 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.