If-Koubou

Geek skola: darbs ar kolekcijām PowerShell

Geek skola: darbs ar kolekcijām PowerShell (Kā)

Tā kā PowerShell ir balstīts uz. Net Framework un ietver dažādas citas tehnoloģijas, piemēram, WMI un CIM, vienmēr ir vairāk nekā viens veids, kā to paveikt. Nāciet pievienoties mums šim īsajam amatam, kur mācāmies izvēlēties labāko metodi, lai veiktu savus uzdevumus.

Noteikti izlasiet iepriekšējos sērijas rakstus:

  • Uzziniet, kā automatizēt Windows ar PowerShell
  • Mācīšanās lietot moduļus PowerShell
  • Mācīšanās kā lietot objektus PowerShell
  • Mācību formēšana, filtrēšana un salīdzināšana PowerShell
  • Uzziniet, kā izmantot utilizācijas PowerShell
  • Izmantojot PowerShell, lai iegūtu informāciju par datoru

Un visu nedēļu pieskarieties atlikušajām sērijām.

Izmantojot partijas komandas

Agrāk šajā sērijā, kad mēs iepazīstināja jūs ar cauruļvadu, mēs parādījām, kā jūs varat uzņemt objektus, kas ir viens cmdlet rezultāts, un nodot to kā ieeju citai cmdletei, izmantojot šādu:

Get-Process -Name notepad | Apstāšanās process

Tas nogalinātu jebkuru procesu ar nosaukumu "notepad". Bet jūs, iespējams, vēlaties uzzināt, kā PowerShell spēj nogalināt katru notepad gadījumus ar vienu komandu. Atbilde ir Stop-Process cmdlet palīdzībā.

palīdzēt Stop-Process-pilnīgi

Ja skatāties uz pēdējo koda rindiņu sintakses sadaļā, jūs varat redzēt, ka parametrs InputObject piekrīt objektam Type Process [] un katru reizi, kad redzat veidu, kam seko divas kvadrātiekavas, piemēram, tas nozīmē, ka parametrs akceptē viens vai vairāki no iepriekšējā tipa. Šajā gadījumā tas pieņem vienu vai vairākus procesa objektus. Tehniski, mēs teiktu, ka InputObject cmdlet pieņem procesu masīvs. Katru reizi, kad jums ir cmdlet, kas šādā veidā atbalsta partijas darbības, izmantojiet to. Tas ir izvēles numurs viens.

WMI izmantošana

Lai gan WMI nav labākā tehnoloģija, kuru piegādā no Microsoft centrālā biroja, tā otrajā vietā ir saraksts ar to, kā strādāt ar objektu kolekcijām. Mēs varējām viegli nokļūt no Win32_Process klases darbības procesa sarakstā, piemēram:

Get-WmiObject-klase Win32_Process

Tā kā WMI vaicājums atgriež savu veida objektu, jums būs jāmeklē tāda metode, kas var apturēt procesu, tādējādi ļaujot caurulei, kas ir Get-member.

Get-WmiObject-klase Win32_Process | Get-dalībnieks

Šķiet, ka tuvākā lieta, kas jāpārtrauc, ir izbeigšanas metode, tādēļ tam jābūt. Lai izsauktu metodi WMI objektā, jūs to vienkārši nospiežat uz Invoke-WmiMethod un norādiet metodes nosaukumu.

Get-WmiObject -Class Win32_Process -Filter "name =" notepad.exe "" | Invoke-WmiMethod-Nosaukums Pārtrauc

Lieliski, ka tas bija triks. Ikreiz, kad saņemat ReturnMI vērtību 0 WMI, vienkārši atcerieties, ka komanda izpildīta veiksmīgi.

Uzskaitījums

Ja neizdodas veikt pārējās divas metodes, ja jums ir jādara kaut kas ar vairākiem objektiem, varat uzskaitīt visu objektu un darboties katram atsevišķam objektam. Vispirms jāatrod metode, kuru izmantosit, lai pārtrauktu vienu procesu.

Get-Process | Get-dalībnieks -MemberType metode

Perfekts, izskatās, ka mēs varam izmantot metodi Kill un pēc tam caurtīt ForEach-Objektam, lai tos nogalinātu.

Get-Process -Name notepad | Katram objektam - process $ _. Kill ()

Šeit mēs paņēmām visus procesa objektus, kas Get-Process tika atgriezti un nodoti tālāk komandu ForEach-Object. Līdzīgi kā kurtuves Objektam cmdlet, mēs pārstāvējām katru objektu, kas tika izveidots kopā ar $ _, kuru mēs varējām izsaukt uz metodi Kill (). Ar visu, kas teica un izdarīts, kolekcijas uzskaitījums ir daudz lēnāks nekā iepriekš minētās metodes, un to vajadzētu izmantot tikai kā pēdējo rezultātu.

Kopsavilkums

Izvēles viens

Get-Process -Name notepad | Apstāšanās process

Divas izvēles

Get-WmiObject -Class Win32_Process -Filter "name =" notepad.exe "" | Invoke-WmiMethod-Nosaukums Pārtrauc

Trešā izvēle

Get-Process -Name notepad | Katram objektam - process $ _. Kill ()

Tas viss ir šai laikam ļaudīm, redzēsim nākamajā nedēļā vairāk PowerShell jautrības.