18Aug

Geek School: Lær hvordan du bruker objekter i PowerShell

Forståelse av objekter er et av de grunnleggende konseptene for å "få" PowerShell. Bli med oss ​​når vi undersøker objekter og hvordan de gjør PowerShell bedre enn noe annet skall der ute i dag.

Husk å lese de forrige artiklene i serien:

  • Lær hvordan du automatiserer Windows med PowerShell
  • Lær å bruke Cmdlets i PowerShell

Og hold deg innstilt for resten av serien hele uken.

Objekter

Har du noen gang lurt på hva som setter PowerShell bortsett fra et tradisjonelt Linux-skall som Bash, eller til og med den gamle kommandoprompten? Svaret er veldig enkelt: Tradisjonelle skaller skriver ut tekst, noe som gjør det vanskelig å gjøre ting som formatering og filtrering. Selvfølgelig er det verktøy som hjelper deg med å få jobben gjort, men på slutten av dagen, hvis du vil gjøre noen form for tunge tekstanalyser, må du kjenne vanlige uttrykk sombaksiden av hånden din.

PowerShell utnytter den underliggende. Net-rammen og tar en annen tilnærming, ved hjelp av objekter i stedet for tekst. Objekter er bare en representasjon av noe. De er en samling av deler og handlinger for å bruke dem. La oss ta en titt på deler av en sykkel og hvordan vi kan bruke dem.

Objekter i. Nett er stort sett unntatt for to små forskjeller: "Delene" kalles egenskaper og "Instruksjoner" kalles metoder .Hvis vi ønsket å representere en Windows-tjeneste som et objekt, kan vi bestemme at det er hensiktsmessig å beskrive det ved hjelp av tre egenskaper: Tjenestens navn, Stat og Beskrivelse. Vi må også samhandle med tjenesten, slik at vi kan gi objektet en start, en stopp og en pause-metode.

Du kan se et objekts egenskaper og metoder ved å sende det til Get-Member-cmdlet. Objektene som utgir PowerShell cmdlet-utganger, er i stor grad underliggende typer fra. Net-rammen, men du kan lage dine egne objekter hvis du trenger å bruke et språk som C # eller bruke PSObject-typen.

Pipeline

Det er mange Linux-skaller med en rørledning, slik at du kan sende teksten som en kommando utdataer som input til neste kommando i rørledningen. PowerShell tar dette til neste nivå ved å tillate deg å ta objektene som en cmdlet utgir og sende dem som input til neste cmdlet i rørledningen. Trikset er å vite hvilken type objekt en cmdlet returnerer, noe som er veldig enkelt når du bruker Get-Member-cmdlet.

Get-Service |Get-Member

For grunner utenfor denne artiklens omfang, blir egenskaper og metoder felles kalt klassemedlemmer, noe som forklarer hvorfor du bruker Get-Member cmdlet for å få en liste over alle metodene og egenskapene et objekt har. Imidlertid returnerer Get-Member-cmdlet også et annet viktig stykke informasjon, den underliggende objekttypen. I ovenstående skjermbilde kan vi se at Get-Service returnerer objekter av typen:

System. ServiceProcess. ServiceController

Siden PowerShell omhandler objekter og ikke tekst, kan ikke alle cmdlets kobles sammen ved hjelp av rørledningen [1].Det betyr at vi må finne en cmdlet som ønsker å akseptere et System. ServiceProcess. ServiceController-objekt fra rørledningen.

Get-Command -ParameterType System. ServiceProcess. ServiceController

Legg merke til at det er en cmdlet kalt Stop-Service;la oss se på hjelpen til det.

Hent-Hjelp-Navn Stopp-Service

Det ser ut som parameteren InputObject tar en rekke ServiceController-objekter som input. Vanligvis, hvis du ser en parameter som heter InputObject, vil den akseptere innspilling fra pipeline, men bare for å være sikker, la oss se på full hjelp for denne parameteren.

Hent-Hjelp-Navn Stopp-Service-Full

Våre mistanke var korrekte. Så på dette punktet vet vi følgende:

  • Get-Service returnerer ServiceController-objekter
  • Stop-Service har en parameter som heter InputObject som aksepterer en eller flere ServiceControllers som input.
  • Parameteren InputObject aksepterer pipelineinngang.

Bruke denne informasjonen kan vi gjøre følgende:

Get-Service -navn 'Apple Mobile Device' |Stopp-Service

Det er alt for denne gangen folkens. Neste gang ser vi på hvordan vi kan formatere, filtrere og sammenligne objekter i rørledningen.

Hjemmearbeid

  • Les opp på objektrøret

Hvis du har noen spørsmål, kan du tweet meg @taybgibb, eller bare gi en kommentar.