11Sep
Kadangi PowerShell remiasi ".Net Framework" ir apima įvairias kitas technologijas, pvz., "WMI" ir "CIM", visada yra daugiau nei vienas būdas tą patį įvykdyti. Prisijunkite prie šio trumpo pranešimo, kuriame išmoksime pasirinkti geriausią būdą savo užduotims atlikti.
Būtinai perskaitykite ankstesnius serijos straipsnius:
- Sužinokite, kaip automatizuoti "Windows" su "PowerShell"
- . Mokytis naudotis "PowerShell" "PowerShell"
- . Mokymasis naudoti objektus "PowerShell"
- mokymosi formatavimas, filtravimas ir palyginimas "PowerShell"
- . Sužinokite, kaip naudoti "Remoting""PowerShell
- " Naudojant "PowerShell", norint gauti kompiuterio informaciją,
. Visą savaitę palaikykite ryšį su likusia serija.
Naudojant serijos komandų eilutes
Anksčiau serijoje, kai pristatėme jus į vamzdyną, parodėme, kaip galite perkelti tokius objektus kaip vieną cmdlet išvesties ir perduoti juos kaip įvesties į kitą cmdlet naudodami kažką panašaus:
Get-Process -Pavadinimas užrašų knygelė |Stop-Process
Tai užmuštų bet kokį procesą pavadinimu "notepad".Bet jūs tikriausiai įdomu, kaip "PowerShell" gali nužudyti kiekvieną "notepad" egzempliorių su viena komanda. Atsakymas yra Stop-Process cmdlet pagalbos.
pagalba Stop-Process-Full
Jei žiūrėsite į paskutinę kodo eilutę sintaksės skyriuje, galite pamatyti, kad parametras InputObject priima "Process []" objektą ir kiekvieną kartą, kai matote tipą, po kurio eina dvi kvadratinės skliaustustai reiškia, kad parametras priima vieną ar daugiau ankstesnio tipo .Tokiu atveju jis priima vieną ar daugiau proceso objektų.Techniškai mes sakytume, kad InputObject cmdlet priima proceso masyvą .Kiekvieną kartą, kai turite tokį komandą, kuri palaiko partijos operacijas, naudokite ją.Tai yra pasirinkimo numeris vienas.
Naudojant WMI
Nors WMI nėra geriausias technologijos gabalas, siunčiamas iš "Microsoft" centrinės būstinės, jis yra antrajame sąraše, kaip dirbti su objektų kolekcijomis. Mes galime lengvai gauti iš "Win32_Process" klasių veikiančių procesų sąrašą taip:
Get-WmiObject-Class Win32_Process
Kadangi WMI užklausa grąžina savo rūšies objektą, turėsite ieškoti metodo, kuris gali sustabdyti procesą.leidžia vamzdį, kuris "Get-member".
Get-WmiObject-Class Win32_Process |Get-member
Atrodo, kad artimiausias dalykas, kurį reikia sustabdyti, yra nutraukimo metodas, todėl jis turi būti toks pats. Norėdami paskambinti WMI Objekto metodui, tiesiog jį įskiepite Invoke-WmiMethod ir nurodykite metodo pavadinimą.
Get-WmiObject -Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Išjungti
Puiku, kad padarė apgauti. Kai tik gausite 0 ReturnMI reikšmę WMI, atminkite, kad komanda sėkmingai įvykdyta.
skaičiavimas
Jei nebus du kiti metodai, jei turite kažką daryti su daugybe objektų, galite išvardyti visą objektą ir veikti kiekvienam objektui. Pirmiausia turite rasti metodą, kurį naudosite norėdami sustabdyti vieną procesą.
Get-Process |Get-member -MemberType metodas
Puikus, atrodo, kad mes galime naudoti metodą "Kill", o po to - "ForEach-Object", kad juos nužudytume.
Get-Process -Name notepad |ForEach-Object -Process{ $ _. Kill()}
Čia mes paėmėme visus proceso objektus, kuriuos Get-Process sugrįžo ir perdavė juos į cmdlet "ForEach-Object".Panašiai kaip "Where-Object" cmdlet mes pristatėme kiekvieną dujotiekio objektą su $ _, kuriuo mes galėjome paskambinti į metodą Kill() .Su visa tai, kas pasakyta ir padaryta, kolekcijos išrašymas yra daug lėtesnis nei pirmiau minėti metodai ir turėtų būti naudojamas tik kaip paskutinis rezultatas.
Santrauka
Choice One
Get-Process -Name notepad |Stop-Process
Choice Two
Get-WmiObject-Class Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Name Išjungti
pasirinkimas Trys
Get-Process -Name notepad |ForEach-Object -Process{ $ _. Kill()}
Tai viskas štai ką žmonės, pamatysite jums kitą savaitę, kol galėsite daugiau "PowerShell" linksmybių.