Geek mokykla Darbas su kolekcijomis „PowerShell“
Kadangi „PowerShell“ yra pagrįsta .Net Framework ir apima įvairias kitas technologijas, pvz., „WMI“ ir „CIM“, visada yra daugiau nei vienas būdas pasiekti tą patį. Ateikite prisijungti prie šio trumpo pranešimo, kuriame mes sužinosime, kaip pasirinkti geriausią būdą atlikti mūsų užduotis.
Būtinai perskaitykite ankstesnius serijos straipsnius:
- Sužinokite, kaip automatizuoti „Windows“ su „PowerShell“
- Mokymasis naudoti „Cmdlet“ „PowerShell“
- Mokymasis naudotis objektais „PowerShell“
- Mokymosi formatavimas, filtravimas ir palyginimas „PowerShell“
- Sužinokite, kaip naudoti „Remoting“ „PowerShell“
- „PowerShell“ naudojimas kompiuterio informacijai gauti
Visą savaitę laikykitės likusios serijos.
„Batch Cmdlet“ naudojimas
Anksčiau serijoje, pristatydami jus į dujotiekį, parodėme, kaip galite imtis objektų, kuriuos vienas cmdlet išvestys, ir perduoti juos kaip įvestį į kitą cmdlet, naudodami kažką panašaus:
Get-Process -Not Notepad | Stop-procesas
Tai nužudytų bet kokį procesą, pavadintą „notepad“. Bet tikriausiai jums įdomu, kaip „PowerShell“ sugeba nužudyti kiekvieną užrašų egzempliorių su viena komanda. Atsakymas priklauso nuo „Stop-Process“ cmdlet.
padėti sustabdyti procesą
Jei pažvelgsite į paskutinę sintaksės kodo eilutę, galite matyti, kad parametras „InputObject“ priima tipo procesą [], o kai matote tipą, po kurio yra du kvadratiniai skliaustai, tai reiškia, kad parametras priima vienas ar daugiau ankstesnio tipo. Tokiu atveju jis priima vieną ar daugiau proceso objektų. Techniškai pasakytume, kad cmdlet InputObject priima procesą masyvas. Jei turite cmdlet, kuris tokiu būdu palaiko partijos operacijas, naudokite jį. Tai yra pirmasis pasirinkimas.
WMI naudojimas
Nors WMI nėra geriausia technologija gabenti iš „Microsoft“ būstinės, ji ateina antrajame sąraše, kaip dirbti su objektų kolekcijomis. Mes galėtume lengvai gauti paleistinų procesų sąrašą iš „Win32_Process“ klasės, pvz .:
Get-WmiObjectClass Win32_Process
Kadangi WMI užklausa grąžina savo objekto rūšį, jums reikės ieškoti metodo, kuris galėtų sustabdyti procesą, taigi leiskite jį perkelti į „Get-Member“.
Get-WmiObjectClass Win32_Process | Gauti narį
Atrodo, kad artimiausias dalykas, kurį reikia nutraukti, yra nutraukimo metodas, taigi jis turi būti vienas. Jei norite skambinti WMI objekto metodu, paprasčiausiai įdėkite jį į „Invoke-WmiMethod“ ir nurodykite metodo pavadinimą.
Get-WmiObjectClass Win32_Process -Filter “name = 'notepad.exe'“ | Invoke-WmiMethod -Name Panaikinkite
Puiku, tai buvo triukas. Kai WMI gausite 0 vertę ReturnValue, tiesiog nepamirškite, kad komanda sėkmingai įvykdyta.
Suskaičiavimas
Jei nėra kitų dviejų metodų, jei turite kažką daryti su krūva objektų, galite išvardinti visą objektą ir veikti kiekvienam atskiram objektui. Pirmiausia turite rasti būdą, kuriuo naudodamiesi sustabdytumėte vieną procesą.
Gauti procesas „Get-Member -MemberType“ metodas
Puikiai atrodo, kad mes galime naudoti „Kill“ metodą, o po to - į „ForEach-Object“, kad juos visus nužudytume.
Get-Process -Not Notepad | ForEach-Object -Process $ _. Kill ()
Čia mes paėmėme visus procesų objektus, kuriuos „Get-Process“ grąžino ir perdavė „ForEach-Object“ cmdlet'ui. Panašiai kaip ir „Cikk-Object“ cmdlet, mes vaizdavome kiekvieną dujotiekio objektą su $ _, kurį galėjome skambinti į „Kill“ () metodą. Visa tai, kas pasakyta ir padaryta, rinkimas yra daug lėtesnis nei pirmiau minėti metodai ir turėtų būti naudojamas tik kaip paskutinis rezultatas.
Santrauka
Vienas pasirinkimas
Get-Process -Not Notepad | Stop-procesas
Du pasirinkimai
Get-WmiObjectClass Win32_Process -Filter “name = 'notepad.exe'“ | Invoke-WmiMethod -Name Panaikinkite
Pasirinkimas Trys
Get-Process -Not Notepad | ForEach-Object -Process $ _. Kill ()
Tai viskas šiam laikui žmonėms, kitą savaitę matys jus daugiau „PowerShell“.