Geek School: Arbeider med samlinger i PowerShell

Innholdsfortegnelse:

Geek School: Arbeider med samlinger i PowerShell
Geek School: Arbeider med samlinger i PowerShell

Video: Geek School: Arbeider med samlinger i PowerShell

Video: Geek School: Arbeider med samlinger i PowerShell
Video: Car Camping in Rain Storm on Mountain - OZTent AT4 Air Tent - YouTube 2024, April
Anonim
Siden PowerShell er basert på. Net Framework og inkorporerer ulike andre teknologier som WMI og CIM, er det alltid mer enn én måte å oppnå det samme. Kom med oss for denne korte innlegget der vi lærer å velge den beste metoden for å utføre oppgavene våre.
Siden PowerShell er basert på. Net Framework og inkorporerer ulike andre teknologier som WMI og CIM, er det alltid mer enn én måte å oppnå det samme. Kom med oss for denne korte innlegget der vi lærer å velge den beste metoden for å utføre oppgavene våre.

Husk å lese de forrige artiklene i serien:

  • Lær hvordan du automatiserer Windows med PowerShell
  • Lære å bruke Cmdlets i PowerShell
  • Lære hvordan du bruker objekter i PowerShell
  • Læreformatering, filtrering og sammenligning i PowerShell
  • Lær å bruke Remoting i PowerShell
  • Bruke PowerShell til å få datamaskininformasjon

Og hold deg innstilt for resten av serien hele uken.

Bruke Batch Cmdlets

Tidligere i serien, da vi introduserte deg til rørledningen, viste vi deg hvordan du kan ta objektene som en cmdlet utgir og sende dem som input til en annen cmdlet ved å bruke noe slikt:

Get-Process -Name notepad | Stop-Process

Dette ville drepe noen prosess med navnet "notisblokk". Men du lurer nok på hvordan PowerShell kan drepe alle forekomster av notisblokk med en enkelt kommando. Svaret ligger i hjelp av Stop-Process cmdlet.

help Stop-Process –Full

Image
Image

Hvis du ser på den siste kodelinjen i syntaksekseksjonen, kan du se at parameteren InputObject aksepterer et objekt av typen Prosess , og når du ser en type etterfulgt av to firkantede parenteser, betyr det at parameteren aksepterer en eller fler av den foregående type. I dette tilfellet aksepterer det ett eller flere prosessobjekter. Teknisk sett vil vi si at InputObject cmdlet aksepterer en prosess matrise. Når du har en cmdlet som støtter batchoperasjoner på denne måten, bruk den. Dette er valg nummer ett.

Bruke WMI

Selv om WMI ikke er det beste stykket teknologi som skal sendes fra Microsoft HQ, kommer det inn på sekunden på listen over hvordan man arbeider med samlinger av objekter. Vi kunne lett få en liste over kjørende prosesser fra Win32_Process-klassen slik:

Get-WmiObject –Class Win32_Process

Siden WMI-spørringen returnerer sin egen type objekt, må du lete etter en metode som kan stoppe prosessen, så vi kan pipe det til Get-Member.
Siden WMI-spørringen returnerer sin egen type objekt, må du lete etter en metode som kan stoppe prosessen, så vi kan pipe det til Get-Member.

Get-WmiObject –Class Win32_Process | Get-Member

Ser ut som det nærmeste å stoppe er termineringsmetoden, så det må være den ene. For å ringe en metode på et WMI-objekt, rør du det bare til Invoke-WmiMethod og spesifiser navnet på metoden.
Ser ut som det nærmeste å stoppe er termineringsmetoden, så det må være den ene. For å ringe en metode på et WMI-objekt, rør du det bare til Invoke-WmiMethod og spesifiser navnet på metoden.

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

Flott, det gjorde kunsten. Når du får en ReturnValue på 0 i WMI, husk bare at kommandoen kjøres vellykket.
Flott, det gjorde kunsten. Når du får en ReturnValue på 0 i WMI, husk bare at kommandoen kjøres vellykket.

oppregning

Mangler de to andre metodene, hvis du må gjøre noe til en haug med objekter, kan du oppsummere hele objektet og handle på hvert enkelt objekt. Først må du finne metoden du vil bruke for å stoppe en enkelt prosess.

Get-Process | Get-Member -MemberType Method

Perfekt, det ser ut til at vi kan bruke Kill-metoden og deretter røre inn i ForEach-Object for å drepe dem alle.
Perfekt, det ser ut til at vi kan bruke Kill-metoden og deretter røre inn i ForEach-Object for å drepe dem alle.

Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}

Her tok vi alle prosessobjektene som Get-Process returnerte og sendte dem videre til ForEach-Object cmdlet. I likhet med cmdlet hvor objektet representerte, representerte vi hvert objekt i rørledningen med $ som vi kunne kalle til Kill () -metoden på. Med alt det som er sagt og gjort, er oppsummering en samling mye tregere enn de ovennevnte metodene, og bør bare brukes som et siste resultat.
Her tok vi alle prosessobjektene som Get-Process returnerte og sendte dem videre til ForEach-Object cmdlet. I likhet med cmdlet hvor objektet representerte, representerte vi hvert objekt i rørledningen med $ som vi kunne kalle til Kill () -metoden på. Med alt det som er sagt og gjort, er oppsummering en samling mye tregere enn de ovennevnte metodene, og bør bare brukes som et siste resultat.

Sammendrag

Choice One

Get-Process -Name notepad | Stop-Process

Valg to

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

Valg tre

Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}

Det er alt for denne gangen folk, ser deg neste uke for mer PowerShell-moro.

Anbefalt: