Geek School Learning Sådan bruger du objekter i PowerShell
Forståelse af objekter er et af de grundlæggende begreber til at "få" PowerShell. Kom med os, når vi udforsker objekter, og hvordan de gør PowerShell bedre end nogen anden skal derude i dag.
Sørg for at læse de tidligere artikler i serien:
- Lær at automatisere Windows med PowerShell
- Lære at bruge Cmdlets i PowerShell
Og hold dig indstillet til resten af serien hele ugen.
objekter
Har du nogensinde spekuleret på, hvad der sætter PowerShell adskilt fra en traditionel Linux-shell som Bash, eller endog den arvede kommandoprompt? Svaret er meget simpelt: Traditionelle skaller udsender tekst, hvilket gør det svært at lave ting som formatering og filtrering. Selvfølgelig er der værktøjer til at hjælpe dig med at få arbejdet udført (sed og grep kommer til at tænke), men i slutningen af dagen, hvis du vil gøre nogen form for tunge tekstanalyser, skal du kende regulære udtryk som tilbage af din hånd.
PowerShell udnytter den underliggende .Net ramme og tager en anden tilgang ved at bruge objekter i stedet for tekst. Objekter er kun en repræsentation af noget. De er en samling af dele og handlinger til at bruge dem. Lad os tage et kig på cykeldele og hvordan vi kan bruge dem.
Objekter i. Net er meget de samme med undtagelse af to små forskelle: "Dele" kaldes ejendomme og "Instruktioner" kaldes metoder. Hvis vi ønskede at repræsentere en Windows-tjeneste som et objekt, kan vi beslutte, at det er hensigtsmæssigt at beskrive det ved hjælp af tre egenskaber: Service Name, State og Description. Vi skal også interagere med tjenesten, så vi kan give objektet en start, en stop og en pause metode.
Du kan se et objekts egenskaber og metoder ved at sende det til Get-Member cmdlet. De genstande, som en PowerShell cmdlet-udgang udsender, er stort set underliggende typer fra .Net-rammen, men du kan oprette dine egne objekter, hvis du skal bruge et sprog som C # eller bruge PSObject-typen.
Rørledningen
Der er masser af Linux-skaller med en rørledning, så du kan sende teksten, som den ene kommando output som input til den næste kommando i rørledningen. PowerShell tager dette til næste niveau ved at tillade dig at tage de objekter, som en cmdlet udsender og sende dem som input til den næste cmdlet i rørledningen. Tricket er at vide, hvilken type objekt en cmdlet vender tilbage, hvilket er meget nemt, når du bruger Get-Member-cmdlet.
Get-Service | Get-medlem
Af grunde uden for denne artikels anvendelsesområde kaldes egenskaber og metoder i fællesskab klassemedlemmer, hvilket forklarer hvorfor du bruger Get-Member-cmdlet til at få en liste over alle de metoder og egenskaber, et objekt har. Hent-medlem-cmdlet returnerer dog også et andet vigtigt stykke information, den underliggende objekttype. I ovenstående skærmbillede kan vi se, at Get-Service returnerer genstande af typen:
System.ServiceProcess.ServiceController
Da PowerShell behandler objekter og ikke tekst, kan ikke alle cmdlets kobles sammen ved hjælp af rørledningen [1]. Det betyder at vi skal finde en cmdlet, der søger at acceptere et System.ServiceProcess.ServiceController objekt fra rørledningen.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Bemærk, at der er en cmdlet kaldet Stop-Service; lad os tage et kig på hjælpen til det.
Hent-Hjælp-Navn Stop-Service
Det ser ud til, at parameteren InputObject tager en række ServiceController-objekter som input. Normalt, hvis du ser en parameter, der hedder InputObject, accepterer den input fra pipeline, men bare for sikker på, lad os kigge på den fulde hjælp til den parameter.
Get-Help -Name Stop-Service -Full
Vores mistanker var korrekte. Så på dette tidspunkt kender vi følgende:
- Get-Service returnerer ServiceController-objekter
- Stop-Service har en parameter, der hedder InputObject, der accepterer en eller flere ServiceControllers som input.
- InputObject-parameteren accepterer pipelineindgang.
Ved hjælp af disse oplysninger kunne vi gøre følgende:
Get-Service-Navnet 'Apple Mobile Device' | Stop-service
Det er alt for denne gang folkens. Næste gang ser vi på, hvordan vi kan formatere, filtrere og sammenligne objekter i pipeline.
Lektier
- Læs op på Objektrørledningen
Hvis du har spørgsmål, kan du tweet mig @taybgibb, eller bare forlade en kommentar.