11Sep
Da PowerShell er baseret på. Net Framework og inkorporerer forskellige andre teknologier som WMI og CIM, er der altid mere end én måde at opnå det samme. Kom med os til denne korte post, hvor vi lærer at vælge den bedste metode til at udføre vores opgaver.
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
- Lær at bruge objekter i PowerShell
- Læring Formatering, filtrering og sammenligning i PowerShell
- Lær at bruge Remoting iPowerShell
- Brug af PowerShell til at få computerinformation
Og hold dig indstillet til resten af serien hele ugen.
Brug af Batch Cmdlets
Tidligere i serien, da vi introducerede dig til rørledningen, viste vi dig, hvordan du kan tage de objekter, som en cmdlet udsender og sende dem som input til en anden cmdlet ved at bruge noget som dette:
Get-Process -Navne notesblok |Stop-Process
Dette ville dræbe enhver proces med navnet "notesblok".Men du spekulerer sikkert på, hvordan PowerShell kan dræbe alle forekomster af notesblok med en enkelt kommando. Svaret ligger inden for hjælp af Stop-Process cmdlet.
help Stop-Process -Full
Hvis du ser på den sidste kode i syntaxafsnittet, kan du se, at parameteren InputObject accepterer et objekt af typen Process [], og når du ser en type efterfulgt af to firkantede parenteser somat det betyder, at parameteren accepterer en eller flere af den foregående type. I dette tilfælde accepterer den et eller flere procesobjekter. Teknisk set vil vi sige, at InputObject cmdlet accepterer en proces array .Når du har en cmdlet, der understøtter batch-operationer på denne måde, skal du bruge den. Dette er valg nummer et.
Brug af WMI
Selv om WMI ikke er det bedste stykke teknologi, der skal sendes fra Microsoft HQ, kommer det ind på anden måde på listen over, hvordan man arbejder med samlinger af objekter. Vi kunne nemt få en liste over kørende processer fra Win32_Process-klassen som sådan:
Get-WmiObject -Class Win32_Process
Da WMI-forespørgslen returnerer sin egen type objekt, skal du søge efter en metode, der kan stoppe processen, såLad os røre det til Get-Member.
Get-WmiObject -Class Win32_Process |Get-Member
Det ligner den nærmeste ting at stoppe er termineringsmetoden, så det må være den ene. For at kalde en metode på et WMI-objekt, rør du det bare til Invoke-WmiMethod og angiver metodenes navn.
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Afslut
Great, det gjorde det trick. Når du får en ReturnValue på 0 i WMI, skal du bare huske, at kommandoen udføres med succes.
-opregning
Hvis du ikke skal gøre noget for en masse genstande, kan du opregne hele objektet og handle på hvert enkelt objekt. Først skal du finde den metode, du vil bruge til at stoppe en enkelt proces.
Get-Process |Get-Member-MemberType Metode
Perfekt, det ser ud til, at vi kan bruge Kill-metoden og derefter rør i ForEach-Object for at dræbe dem alle.
Get-Process -Name notesblok |ForEach-Object -Process{ $ _. Kill()}
Her tog vi alle de procesobjekter, som Get-Process returnerede og sendte dem til cmclet ForEach-Object. Ligesom cmdlet hvor objektet repræsenterede vi hvert objekt i rørledningen med $ _ som vi kunne kalde til Kill() -metoden på.Med alt det, der er sagt og gjort, er opsummering af en samling meget langsommere end ovennævnte metoder og bør kun bruges som et sidste resultat.
Sammendrag
Valg One
Get-Process-Name notesblok |Stop-Process
Valg to
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod-Name Afslut
Valg Tre
Get-Process -Name notesblok |ForEach-Object-Process{ $ _. Kill()}
Det er alt for denne gang folk, vi ses næste uge for mere PowerShell sjov.