Mājas lapa » » Geek skola Darbs ar kolekcijām PowerShell

    Geek skola Darbs ar kolekcijām PowerShell

    Tā kā PowerShell pamatā ir .Net Framework, un tā ietver dažādas citas tehnoloģijas, piemēram, WMI un CIM, vienmēr ir vairāki veidi, kā to izdarīt. Nāciet pievienoties mums šajā īsajā postenī, kurā mēs uzzinām, kā izvēlēties labāko metodi, lai izpildītu mūsu uzdevumus.

    Noteikti izlasiet iepriekšējos sērijas rakstus:

    • Uzziniet, kā automatizēt Windows ar PowerShell
    • Mācīšanās lietot Cmdlet PowerShell
    • Mācīšanās lietot objektus PowerShell
    • Mācību formatēšana, filtrēšana un salīdzināšana programmā PowerShell
    • Uzziniet, kā lietot Remoting PowerShell
    • Izmantojot PowerShell, lai iegūtu informāciju par datoru

    Un visu nedēļu palieciet pārējo sēriju.

    Sērijas kopiju izmantošana

    Sērijas agrāk, kad jūs iepazīstinājām ar cauruļvadu, mēs parādījām, kā jūs varat veikt objektus, kurus viens cmdlet izvadīs, un nodot tos kā ievadi citā cmdlet, izmantojot kaut ko tādu:

    Get-Process -Note notepad | Stop-process

    Tas nogalinātu jebkuru procesu ar nosaukumu “notepad”. Bet jūs, iespējams, domājat, kā PowerShell spēj nogalināt katru notepad eksemplāru ar vienu komandu. Atbilde ir atkarīga no Stop-Process cmdlet.

    palīdzēt Stop-Process - Pilnīga

    Ja skatāties sintakses sadaļas pēdējo koda rindu, jūs varat redzēt, ka parametrs InputObject akceptē tipa procesu [], un, kad redzat veidu, kam seko divas kvadrātiekavas, tas nozīmē, ka parametrs pieņem viens vai vairāki iepriekšējā tipa. Šādā gadījumā tā pieņem vienu vai vairākus procesa objektus. Tehniski mēs teiktu, ka cmdlet InputObject pieņem procesu masīvs. Ja jums ir cmdlet, kas šādā veidā atbalsta partijas darbību, izmantojiet to. Tā ir pirmā izvēle.

    WMI izmantošana

    Lai gan WMI nav labākā tehnoloģija, lai nosūtītu no Microsoft HQ, tā nonāk otrajā sarakstā par to, kā strādāt ar objektu kolekcijām. Mēs varētu viegli iegūt darbības procesu sarakstu no Win32_Process klases, piemēram:

    Get-WmiObject -Class Win32_Process

    Tā kā WMI vaicājums atgriež savu sava veida objektu, jums būs jāmeklē metode, kas var apturēt procesu, tāpēc ļauj to novirzīt uz Get-Member.

    Get-WmiObject -Class Win32_Process | Get-Member

    Šķiet, ka tuvākā lieta, kas jāpārtrauc, ir pārtraukt metodi, tāpēc tai jābūt vienai. Lai piezvanītu uz WMI objekta metodi, jūs vienkārši izvilksiet to uz Invoke-WmiMethod un norādiet metodes nosaukumu.

    Get-WmiObject -Class Win32_Process -Filtrs “name = 'notepad.exe'” | Invoke-WmiMethod -Name Noslēdziet

    Lieliski, ka triks. Ikreiz, kad WMI atgriežat vērtību 0, vienkārši atcerieties, ka komanda ir veiksmīgi izpildīta.

    Uzskaitīšana

    Ja nav citu divu metožu, ja kaut kas ir jādara kādam objektam, varat uzskaitīt visu objektu un rīkoties katram atsevišķam objektam. Vispirms jums ir jāatrod metode, ko izmantojat, lai apturētu vienu procesu.

    Get-Process | Get-Member-Type tipa metode

    Ideāls, izskatās, ka mēs varam izmantot Kill metodi un pēc tam caurumu uz ForEach-Object, lai tos nogalinātu.

    Get-Process -Note notepad | ForEach-Object -Process $ _. Kill ()

    Šeit mēs paņēmām visus procesa objektus, kurus Get-Process atgriezās, un nodeva tos ForEach-Object cmdlet. Līdzīgi kā kur-Object cmdlet, mēs pārstāvējām katru cauruļvada objektu ar $ _, kuru mēs varējām piezvanīt uz Kill () metodi. Ar visu, kas ir teikts un izdarīts, kolekcijas uzskaitīšana ir daudz lēnāka nekā iepriekš minētās metodes, un to vajadzētu izmantot tikai kā pēdējo rezultātu.

    Kopsavilkums

    Viena izvēle

    Get-Process -Note notepad | Stop-process

    Otrā izvēle

    Get-WmiObject -Class Win32_Process -Filtrs “name = 'notepad.exe'” | Invoke-WmiMethod -Name Noslēdziet

    Izvēle Trīs

    Get-Process -Note notepad | ForEach-Object -Process $ _. Kill ()

    Tas ir viss šajā laikā, ļaudis, jūs redzēsiet nākamajā nedēļā, lai iegūtu vairāk PowerShell.