18Aug
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.