"Geek" mokykla: "PowerShell" darbas su rinkiniais

Turinys:

"Geek" mokykla: "PowerShell" darbas su rinkiniais
"Geek" mokykla: "PowerShell" darbas su rinkiniais

Video: "Geek" mokykla: "PowerShell" darbas su rinkiniais

Video:
Video: Lewis Capaldi - Before You Go (Official Video) 2024, Balandis
Anonim
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.
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" kompiliacijomis
  • Mokymasis naudoti objektus PowerShell
  • Mokymosi formatavimas, filtravimas ir palyginimas PowerShell
  • Sužinokite, kaip naudoti "Remoting" "PowerShell"
  • "PowerShell" naudojimas kompiuterio informacijai gauti

Ir visada sekite visą seriją likusiai savaitę.

Naudojant paketo modulius

Anksčiau serijoje, kai pristatėme jus prie dujotiekio, parodėme, kaip jūs galite pasiimti objektus, kurie yra vienas cmdlet išvestis, ir perduoda juos kaip įvedimą kitai cmdlet, naudodami tokį patį:

Get-Process -Name notepad | 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.

help Stop-Process –Full

Image
Image

Jei žiūrite į paskutinę kodo eilutę sintaksės skyriuje, galite pamatyti, kad parametras "InputObject" priima "Process " objektą ir kiekvieną kartą, kai matote tipą, po kurio eina du kvadratinės skliaustus, tai reiškia, kad parametras priima vienas ar daugiau ankstesnio tipo. Tokiu atveju jis priima vieną ar daugiau proceso objektų. Techniškai mes sakytume, kad "InputObject" cmdlet priima procesą masyvas. Kiekvieną kartą, kai turite tokį komandą, kuri palaiko partijos operacijas, naudokite ją. Tai yra pasirinkimo numeris vienas.

WMI naudojimas

Nors WMI nėra geriausias technologijos gabalas, siunčiamas iš "Microsoft" štabo, jis ateina antrajame sąraše, kaip dirbti su objektų kolekcijomis. Mes galime lengvai gauti paleisti procesų sąrašą iš Win32_Process klasės, tokiu būdu:

Get-WmiObject –Class Win32_Process

Kadangi WMI užklausa grąžina savo rūšies objektą, turėsite ieškoti metodo, galinčio sustabdyti procesą, todėl leiskite vamzdį, kuris bus "Get-member".
Kadangi WMI užklausa grąžina savo rūšies objektą, turėsite ieškoti metodo, galinčio sustabdyti procesą, todėl leiskite vamzdį, kuris bus "Get-member".

Get-WmiObject –Class Win32_Process | Get-Member

Atrodo, kad artimiausias dalykas, kurį reikia sustabdyti, yra nutraukti metodą, todėl jis turi būti vienas. Norėdami paskambinti WMI Objekto metodui, tiesiog jį įskiepite Invoke-WmiMethod ir nurodykite metodo pavadinimą.
Atrodo, kad artimiausias dalykas, kurį reikia sustabdyti, yra nutraukti metodą, todėl jis turi būti vienas. 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 Terminate

Puiku, kad padarė apgauti. Kai tik gausite 0 ReturnMI reikšmę WMI, atminkite, kad komanda sėkmingai įvykdyta.
Puiku, kad padarė apgauti. Kai tik gausite 0 ReturnMI reikšmę WMI, atminkite, kad komanda sėkmingai įvykdyta.

Numeravimas

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 Method

Puiku, atrodo, kad mes galime naudoti metodą "Kill", o po to - "ForEach-Object", kad juos nužudytume.
Puiku, 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 surinkome visus proceso objektus, kuriuos "Get-Process" grąžino, ir perduodė juos į "ForEach-Object" cmdlet. Panašiai kaip "Where-Object" cmdlet mes pristatėme kiekvieną dujotiekio objektą su $ , kuriuo mes galėjome paskambinti į metodą Kill (). Su viskuo, 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 paskutinį rezultatą.
Čia surinkome visus proceso objektus, kuriuos "Get-Process" grąžino, ir perduodė juos į "ForEach-Object" cmdlet. Panašiai kaip "Where-Object" cmdlet mes pristatėme kiekvieną dujotiekio objektą su $ , kuriuo mes galėjome paskambinti į metodą Kill (). Su viskuo, 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 paskutinį rezultatą.

Santrauka

Pasirinkimas vienas

Get-Process -Name notepad | Stop-Process

Pasirinkimas du

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

Trečias pasirinkimas

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

Visa tai tinka šiai dienai žmonėms, kitą savaitę pamatysite daugiau "PowerShell" linksmybių.

Rekomenduojamas: