11Sep

Geek skola: darbs ar kolekcijām PowerShell

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ā panākt to pašu. Nāciet pievienoties mums šim īsajam amatam, kur mācāmies izvēlēties labāko metodi, lai veiktu savus uzdevumus.

Pārliecinieties, ka esat izlasījis iepriekšējos sērijas rakstus:

  • Uzziniet, kā automatizēt Windows ar PowerShell
  • Mācīties lietot komandas PowerShell
  • Mācīšanās lietot objektus PowerShell
  • Mācību formēšana, filtrēšana un salīdzināšana PowerShell
  • Iemācieties lietot RemotingPowerShell
  • Izmantojot PowerShell, lai iegūtu datora informāciju

un palieciet noregulē uz pārējām sērijām visu nedēļu.

Izmantojot partijas komandrindas

Agrāk sērijās, 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 vienā cmdlet izvadi, un nodot tos kā izejvielas citai cmdletai, izmantojot šādu:

Get-Process -Nosaukuma piezīmeStop-Process

Tas varētu nogalināt 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ība Stop-Process-Full

Ja skatāties uz koda pēdējo 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ēramka tas nozīmē, ka parametrs pieņem vienu vai vairākus iepriekšējā tipa .Šajā gadījumā tas pieņem vienu vai vairākus procesa objektus. Tehniski, mēs teiktu, ka InputObject cmdlet pieņem procesa masīvu .Katru reizi, kad jums ir cmdlet, kas šādā veidā atbalsta partijas darbības, izmantojiet to. Tas ir izvēles numurs viens.

Izmantojot WMI

Lai gan WMI nav labākā tehnoloģija, kas tiek piegādāta no Microsoft centrālā biroja, tā ir otrajā sarakstā par to, kā strādāt ar objektu kolekcijām. Mēs varētu viegli iegūt veiktspējas procesu sarakstu no Win32_Process klases tā:

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ādēļļauj cauruļvadi, lai Get-dalībnieks.

Get-WmiObject-klase Win32_Process |Get-member

Šķiet, ka tuvākā lieta, kas jāpārtrauc, ir pārtraukt metodi, 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 Izbeigt

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 ķekām objektu, varat uzskaitīt visu objektu un rīkoties katram atsevišķam objektam. Vispirms jāatrod metode, kuru izmantosit, lai pārtrauktu vienu procesu.

iegūšanas process |Get-Member -MemberType Metode

Perfect, izskatās, ka mēs varam izmantot Kill metodi un pēc tam caurvēt ForEach-Object, lai tos nogalinātu visus.

Get-Process -Name notepad |ForEach-Object-Process{ $ _. Kill()}

Šeit mēs paņēmām visus procesa objektus, kurus Get-Process atgriezās un izlaida 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

Choice One

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

izvēle Divi

Get-WmiObject-klase Win32_Process -Filter "name =" notepad.exe "" |Invoke-WmiMethod -Name Pārtraukt

izvēle Trīs

Get-Process -Name notepad |ForEach-Object-Process{ $ _. Kill()}

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