Pagrindinis » kaip » Geek mokykla Darbas su kolekcijomis „PowerShell“

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