11Sep

"Geek" mokykla: "PowerShell" darbas su rinkiniais

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ų.