10Aug

Geek School: Lære 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.

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 en liste over -tjenester og deres status - det er rigtigt, det er lige så nemt som Get-Service. Hvordan tror du, at vi ville 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.