11Sep

Geek School: delo s kolekcijami v PowerShell

Ker PowerShell temelji na. Net Framework in vključuje različne druge tehnologije, kot sta WMI in CIM, vedno obstaja več kot en način za uresničitev iste stvari. Pridi se nam pridružite za to kratko objavo, kjer se naučimo, kako izbrati najboljši način za izpolnjevanje naših nalog.

Prosimo, da preberete prejšnje članke v seriji:

  • Naučite se, kako avtomatizirati Windows z PowerShellom
  • Učenje za uporabo ukazov Cmdlets v PowerShellu
  • Učenje Kako uporabljati predmete v PowerShellu
  • Formiranje, filtriranje in primerjanje učenja v programu PowerShell
  • Naučite se uporabljati daljinec vPowerShell
  • Uporaba PowerShell-a za pridobivanje informacij o računalniku

In ostati nastavljeni za preostanek serije ves teden.

Uporaba serijskih programov

V preteklosti v seriji, ko smo vas predstavili v cevovodu, smo vam pokazali, kako lahko vzamete predmete, ki jih eden od njih izstavi, in jih prenesite kot vhod v drugo cmdlet z uporabo takega:

Get-Process -Ime beležka |Stop-Process

To bi ubilo vsak proces z imenom "notepad".Ampak verjetno se sprašujete, kako PowerShell lahko ubije vse primere notepad z enim samim ukazom. Odgovor je v pomoč z cmdletom Stop-Process.

pomoč Stop-Process -Full

Če pogledate zadnjo vrstico kode v razdelku sintakse, lahko vidite, da parameter InputObject sprejema predmet tipa Process [] in kadar koli vidite vrsto, ki ji sledita dva oglata oklepaja, na primerda to pomeni, da parameter sprejme eno ali več prejšnjega tipa. V tem primeru sprejema enega ali več procesnih objektov. Tehnično bi rekli, da ukazna vrstica InputObject sprejema matrično polje .Kadarkoli imate cmdlet, ki podpira takšne postopke, ga uporabite. To je izbira številka ena.

Uporaba WMI

Čeprav WMI ni najboljši del tehnologije, ki se pošilja iz Microsoft HQ-ja, se na seznamu, kako delati z zbirkami predmetov, naenkrat prihaja. Z lahkoto lahko dobimo seznam tekočih procesov iz razreda Win32_Process:

Get-WmiObject -Class Win32_Process

Ker poizvedba WMI vrne lastno vrsto predmeta, boste morali poiskati metodo, ki lahko ustavi proces, tako daomogoča cevi, da Get-član.

Get-WmiObject -Class Win32_Process |Get-Member

Izgleda, da je najbližja stvar ustaviti, je metoda končanja, zato mora biti ta.Če želite poklicati metodo v objektu WMI, jo preprosto vstavite v Invoke-WmiMethod in podate ime metode.

Get-WmiObject -Class Win32_Process -Filter "ime =" notepad.exe "" |Invoke-WmiMethod -Name Prekinite

Odlično, to je naredilo trik. Kadarkoli dobite povratno vrednost 0 v WMI, se zapomnite, da je bil ukaz uspešno izveden.

Številčenje

Če ne uporabljate drugih dveh metod, če morate nekaj narediti skupini predmetov, lahko navedete celoten predmet in ukrepate na vsakem posameznem objektu. Najprej morate najti metodo, ki jo boste uporabili, da ustavite en sam postopek.

Get-Process |Get-Member -MemberType Metoda

Popolnoma se zdi, da lahko uporabimo metodo Kill in nato cev v ForEach-Object, da jih ubijemo.

Get-Process-Ime beležka |ForEach-Object-Proces{ $ _. Kill()}

Tu smo vzeli vse procesne predmete, ki jih je Get-Process vrnil in jih prenesel v cmdlet ForEach-Object. Podobno kot cmdlet Where-Object smo predstavili vsak predmet v plinovodu z $ _, na katerega smo lahko poklicali metodo Kill() .Z vsem, kar je bilo rečeno in storjeno, je nabiranje precej počasnejše od zgornjih metod in bi ga bilo treba uporabiti le kot zadnji rezultat.

Povzetek

izbira En

Get-Process-ime beležka |Stop-Process

Izbira dveh

Get-WmiObject -Class Win32_Process -Filter "name =" notepad.exe "" |Invoke-WmiMethod -Name Prekinitev

Izbira Trije

Get-Process-ime beležka |ForEach-Object-Proces{ $ _. Kill()}

To je vse za tokrat, ljudje, vidimo se naslednji teden za več zabave PowerShell.