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:
Un visu nedēļu pieskarieties atlikušajām sērijām.
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.
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.
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.
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.