Geek School Learning Hur man använder objekt i PowerShell
Att förstå objekt är ett av de grundläggande begreppen för att "få" PowerShell. Följ oss när vi utforskar objekt och hur de gör PowerShell bättre än något annat skal där ute idag.
Var noga med att läsa de föregående artiklarna i serien:
- Lär dig hur du automatiserar Windows med PowerShell
- Att lära sig använda Cmdlets i PowerShell
Och håll dig uppdaterad för resten av serien hela veckan.
Objekt
Har du någonsin undrat vad PowerShell ställer förutom ett traditionellt Linux-skal som Bash, eller till och med den äldre kommandotolken? Svaret är väldigt enkelt: Traditionella skalar skriver ut text, vilket gör det svårt att göra saker som formatering och filtrering. Självklart finns det verktyg som hjälper dig att få jobbet gjort (sed och grep kommer i åtanke), men i slutet av dagen, om du vill göra någon form av tung textparsning, behöver du veta vanliga uttryck som tillbaka på din hand.
PowerShell utnyttjar det underliggande. Net-ramverket och tar ett annat tillvägagångssätt, med hjälp av objekt istället för text. Objekt är bara en representation av något. De är en samling av delar och åtgärder för att använda dem. Låt oss ta en titt på cykelens delar och hur vi kan använda dem.
Objekt i. Net är detsamma med undantag för två små skillnader: "Delarna" heter egenskaper och "Instruktioner" heter metoder. Om vi ville representera en Windows-tjänst som ett objekt kan vi bestämma att det är lämpligt att beskriva det med hjälp av tre egenskaper: Servicenamn, Stat och Beskrivning. Vi måste också interagera med tjänsten, så vi kan ge objektet en start, en stopp och en paus-metod.
Du kan se ett objekts egenskaper och metoder genom att skicka det till Get-Member-cmdlet. Föremålen som en PowerShell cmdlet-utmatning är till stor del underliggande typer från .Net-ramverket, men du kan skapa egna objekt om du behöver använda ett språk som C # eller använda PSObject-typen.
Pipeline
Det finns gott om Linux-skal med en pipeline, så att du kan skicka texten som ett kommando utmatas som inmatning till nästa kommando i pipelinen. PowerShell tar det här till nästa nivå genom att låta dig ta objekten som en cmdlet matar ut och skickar dem som inmatning till nästa cmdlet i rörledningen. Tricket är att veta vilken typ av objekt en cmdlet returnerar, vilket är väldigt lätt när man använder Get-Member cmdlet.
Get-Service | Get-medlem
För anledningar som ligger utanför denna artikels artikel heter egenskaper och metoder gemensamt kallade klassmedlemmar, vilket förklarar varför du använder Get-Member-cmdletet för att få en lista över alla metoder och egenskaper som ett objekt har. Get-Member-cmdlet returnerar emellertid också en annan viktig information, den underliggande objekttypen. I ovanstående skärmdump kan vi se att Get-Service returnerar objekt av typen:
System.ServiceProcess.ServiceController
Eftersom PowerShell behandlar objekt och inte text, kan inte alla cmdlets kopplas samman med hjälp av rörledningen [1]. Det betyder att vi behöver hitta en cmdlet som ser ut att acceptera ett System.ServiceProcess.ServiceController-objekt från rörledningen.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Observera att det finns en cmdlet kallad Stop-Service; låt oss ta en titt på hjälpen för det.
Get-Help-Name Stop-Service
Det ser ut att parametern InputObject tar en rad ServiceController-objekt som inmatning. Vanligtvis, om du ser en parameter som heter InputObject, kommer den att acceptera inmatning från pipeln, men bara för att vara säker, låt oss ta en titt på den fulla hjälpen för den parametern.
Get-Help-Name Stopp-Service-Full
Våra misstankar var korrekta. Så vid denna tidpunkt vet vi följande:
- Get-Service returnerar ServiceController-objekt
- Stop-Service har en parameter som heter InputObject som accepterar en eller flera ServiceControllers som input.
- InputObject-parametern accepterar pipelineingång.
Med hjälp av denna information kan vi göra följande:
Get-Service -Name "Apple Mobile Device" | Stop-Service
Det är allt för den här gången folks. Nästa gång tittar vi på hur vi kan formatera, filtrera och jämföra objekt i pipelinen.
Läxa
- Läs upp på Objektledningen
Om du har några frågor kan du tweeta mig @taybgibb, eller bara lämna en kommentar.