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
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
Get-WmiObject –Class Win32_Process | Get-Member
Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate
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
Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()}
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.