Geek School Learning att använda Cmdlets i PowerShell
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 seriens första del 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. Till exempel, antar att du vill skaffa sig en lista av tjänster och deras status - det är rätt, det är lika enkelt som Get-Service. Hur tror du att vi skulle skaffa sig en lista över körning processer - Det är rätt, Get-Process kommer att göra tricket.
Get-Process
Det gör det väldigt lätt 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 teknikspecifika 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 av de 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 kommer aldrig.
alias
En annan funktion som PowerShell kommer med är möjligheten att ha flera sätt att driva 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 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:
Hämta-alias-namn ls
Å andra sidan, om du känner att det är dags att stiga ditt spel upp, 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 en 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 måste du ersätta "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 alias du har definierat när du stänger skalet. Du kan komma runt detta genom att lägga till deras definition i ditt profilskript.
Avkortande parametrar
Windows PowerShell tillåter dig också att avkorta 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 pratar om. Till exempel:
Get-Service-Namn "Apple Mobile Device" -ComputerName localhost
Är det samma som:
Get-Service -Na "Apple Mobile Device" - på localhost
Om du eventuellt gör parametrarna för dubbelt så får du ett fel.
Legacy Commands
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 skriver ut en sträng, och det finns 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.