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.