18Aug

Geek School: Lær at bruge 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 hvordan du automatiserer Windows med PowerShell
  • Lær 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 endda den arvige 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 somtilbage 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 undtagen for to små forskelle: "Dele" kaldes egenskaber 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 udsender som input til den næste kommando i rørledningen. PowerShell tager dette til næste niveau ved at lade dig 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 man bruger Get-Member-cmdlet.

Get-Service |Get-Member

Af grunde uden for denne artikels anvendelsesområde kaldes ejendomme og metoder i fællesskab til klassemedlemmer, hvilket forklarer hvorfor du bruger Get-Member-cmdlet til at få en liste over alle de metoder og egenskaber, et objekt har. Get-Member-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.

Get-Help -Name Stop-Service

Det ser ud som, at InputObject-parameteren har en række ServiceController-objekter som input. Hvis du ser en parameter, der hedder InputObject, accepterer det normalt input fra pipeline, men bare for sikker på, lad os se på den fulde hjælp til denne parameter.

Get-Help -Name Stop-Service -Fuld

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.
  • Parameteren InputObject accepterer pipelineindgang.

Ved hjælp af denne information kunne vi gøre følgende:

Get-Service -Name '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.

Hjemmearbejde

  • Læs op på Objekt Pipeline

Hvis du har spørgsmål, kan du tweet mig @taybgibb, eller bare forlade en kommentar.