10Aug
Om du har använt ipconfig eller ping genom kommandotolken, är du halvvägs för att bli en PowerShell ninja. Så kom igen och kom med oss när vi upptäcker cmdlets i denna installation av Geek School.
Var noga med att kolla in vår första artikel som introducerar PowerShell, och håll dig uppdaterad för resten av serien hela veckan.
Anatomi av en Cmdlet
I den första delen av serien såg vi en cmdlet som såg ut så här:
Update-Help
PowerShell cmdlets har en Verb-Noun-syntax som kan ses ovan. Det viktiga att notera är att substantivet alltid är singulärt trots att cmdletet kan returnera mer än ett resultat. För att se en lista med juridiska verb i PowerShell kan du använda Get-Verb cmdlet.
Att veta de juridiska verben och komma ihåg den singulära substantivregeln hjälper verkligen gissa cmdlet namn. Antag exempelvis att du vill få en lista över -tjänster och deras status - det är rätt så enkelt som Get-Service. Hur tror du att vi skulle få en lista med löpande -processer - det är rätt, kommer Get-Process att göra tricket.
Get-Process
Det här gör det väldigt enkelt att arbeta med vilken teknik som helst. Om du till exempel har hämtat Exchange-cmdlets kan vi enkelt få en lista med brevlådor på servern genom att använda:
Get-Mailbox
Det finns dock ett undantag. Byt till sida, alla andra specifika kommandon kräver ett prefix. Om vi till exempel vill få de användare som för närvarande är inloggade via fjärrskrivbord, skriver vi:
Get-RDUserSession
Vilket kan ses på skärmdumpen nedan.
Obs: Den här skärmdumpen togs på en Server 2012-låda som det är där du ska hitta de flesta teknikspecifika modulerna.
För en tid sedan läste jag en artikel av Don Jones, Godfather of PowerShell, där han förklarade att Exchange sändes innan detta prefix fanns till cmdlets, så det implementerade dem aldrig och aldrig vill.
Aliases
En annan funktion som PowerShell kommer med är möjligheten att ha flera sätt att köra samma kommandoalias, om du vill. Det fantastiska med dem är att de innehöll många kommandon som du kanske har använt i kommandotolkningen, liksom vissa Linux alias. I PowerShell kan vi till exempel få en kataloglista genom att använda:
Get-ChildItem
Används för att använda kommandotolken? Oroa dig inte, de har du täckt.
Har en Linux-bakgrund? De har du täckt där också.
När du har skrivit i ett par år tenderar du att bli lat och börja använda alias mycket, men det hjälper inte nykomlingar som läser vår kod. För att se vilket kommando ett alias kör under huven kan du använda följande:
Get-Alias-Name ls
Å andra sidan, om du känner att det är dags att stega upp ditt spel, kan du använda definitionparametern för att fåalla alias för en cmdlet:
Get-ChildItem-Definitions Get-ChildItem
Om du kommer från någon annan bakgrund kan du lägga till dina egna alias genom att göra följande:
New-Alias -Name icanhazfilez -Value Get-ChildItem
Självklart, Du måste byta "icanhazfilez" med namnet på ditt nya alias och Get-ChildItem med cmdletet du vill att den ska springa under huven.
En sak att notera är att du förlorar alla aliaser du har definierat när du stänger skalet. Du kan komma runt detta genom att lägga till deras definition i ditt profilskript.
-trunkeringsparametrar
Windows PowerShell låter dig också trunka parameternamn fram till den punkt där de blir tvetydiga, det vill säga fram till den punkt där PowerShell inte längre kan ta reda på vilken parameter du talar om. Till exempel:
Get-Service -namn "Apple Mobile Device" -kompaternamn localhost
är samma som:
Get-Service -Na "Apple Mobile Device" - på localhost
Om du med några chanser gör parametrarna namnger är du för tvetydigkommer att få ett fel.
Legacy Command
Slutligen fungerar de kommandon du känner och älskar fortfarande i PowerShell.
ping www.google.com
Kom bara ihåg att äldre program som ping utmatar en sträng, och det är ofta ett bättre sätt att göra samma sak med en PowerShell-cmdlet.
I stället för att lägga ut en lång textsträng, lämnar vi nu ett objekt, som vi kommer att titta på i morgondagens upplaga av Geek School.