Geek skola: darbs ar kolekcijām PowerShell

Satura rādītājs:

Geek skola: darbs ar kolekcijām PowerShell
Geek skola: darbs ar kolekcijām PowerShell

Video: Geek skola: darbs ar kolekcijām PowerShell

Video: Geek skola: darbs ar kolekcijām PowerShell
Video: The Rise and Fall of Tombstone Arizona - YouTube 2024, Novembris
Anonim
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.
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 | Stop-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ā.

help Stop-Process –Full

Image
Image

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 –Class 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.
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 –Class Win32_Process | Get-Member

Šķ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.
Šķ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 -Name Terminate

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.
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-Member -MemberType Method

Perfekts, izskatās, ka mēs varam izmantot metodi Kill un pēc tam caurtīt ForEach-Objektam, lai tos nogalinātu.
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 | ForEach-Object -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.
Š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 | Stop-Process

Divas izvēles

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

Trešā izvēle

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

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

Ieteicams: