If-Koubou

Geek School: Lucrul cu colecții în PowerShell

Geek School: Lucrul cu colecții în PowerShell (Cum să)

Deoarece PowerShell se bazează pe .Net Framework și încorporează diverse alte tehnologii precum WMI și CIM, există întotdeauna mai multe metode de a realiza același lucru. Vino alături de noi pentru acest post scurt unde învățăm cum să alegem cea mai bună metodă pentru a ne îndeplini sarcinile.

Asigurați-vă că citiți articolele anterioare din seria:

  • Aflați cum să automatizați Windows cu PowerShell
  • Învățați să utilizați Cmdlets în PowerShell
  • Învățați cum să utilizați obiecte în PowerShell
  • Învățarea formatării, filtrarea și compararea în PowerShell
  • Aflați cum să utilizați Remoting în PowerShell
  • Folosind PowerShell pentru a obține informații despre computer

Și stați liniștit pentru restul seriei toată săptămâna.

Utilizând modulele de batch

Mai devreme în serie, când v-am introdus în conductă, v-am arătat cum puteți să luați obiectele pe care le obțineți câte un cmdlet și să le transmiteți ca intrări unui alt cmdlet folosind ceva de genul:

Get-Process -Turn notepad Stop-proces

Acest lucru ar ucide orice proces cu numele "notepad". Dar probabil vă întrebați cum PowerShell este capabil să omoare fiecare instanță a notepad-ului cu o singură comandă. Răspunsul constă în ajutorul cmdletului Stop-Process.

ajutor Stop-Process -Full

Dacă vă uitați la ultima linie de cod din secțiunea de sintaxă, puteți vedea că parametrul InputObject acceptă un obiect de tip Process [], și ori de câte ori vedeți un tip urmat de două paranteze pătrate, aceasta înseamnă că parametrul acceptă una sau mai multe de tipul precedent. În acest caz, acceptă unul sau mai multe obiecte de proces. Din punct de vedere tehnic, am spune că cmdletul InputObject acceptă un proces mulțime. Ori de câte ori aveți un cmdlet care acceptă operațiile lotului în acest mod, utilizați-l. Aceasta este prima alegere.

Utilizarea WMI

Deși WMI nu este cea mai bună tehnologie de transportat de la sediul Microsoft, acesta se află pe locul al doilea pe lista de lucru cu colecțiile de obiecte. Am putea obține cu ușurință o listă de procese care rulează din clasa Win32_Process așa:

Obțineți-WmiObject -Class Win32_Process

Întrucât interogarea WMI returnează un fel de obiect propriu, va trebui să căutați o metodă care să oprească procesul, astfel încât să permită țevii ca Get-Member.

Obțineți-WmiObject -Class Win32_Process | Get-membru

Se pare că cel mai apropiat lucru pe care trebuie să-l oprești este metoda terminată, așa că trebuie să fie una. Pentru a apela o metodă pe un obiect WMI, pur și simplu o conduceți la Invoke-WmiMethod și specificați numele metodei.

Get-WmiObject - Clasa Win32_Process -Filter "name = 'notepad.exe" "| Invoke-WmiMethod - Termină

Mare, a făcut truc. Ori de câte ori primiți ReturnValue de 0 în WMI, nu uitați că comanda a fost executată cu succes.

Enumerare

Dacă nu reușiți celelalte două metode, dacă trebuie să faceți ceva la o grămadă de obiecte, puteți enumera întregul obiect și puteți acționa asupra fiecărui obiect individual. Mai întâi trebuie să găsiți metoda pe care ați folosi-o pentru a opri un singur proces.

Get-Process Obțineți-Membru -MembruTip Metoda

Perfect, se pare că putem folosi metoda Kill și apoi o conducem în ForEach-Object pentru ai ucide pe toți.

Get-Process -Turn notepad ForEach-Object -Process $ _.Kill ()

Aici am luat toate obiectele procesului pe care Get-Process le-a returnat și le-a transferat în fișierul ForEach-Object. La fel ca în cazul cmdletului Where-Object, am reprezentat fiecare obiect în conductă cu $ _ pe care am putut să-l apelăm la metoda Kill (). Cu tot ceea ce sa spus și făcut, enumerarea unei colecții este mult mai lentă decât metodele de mai sus și ar trebui utilizată doar ca un ultim rezultat.

rezumat

Alege una

Get-Process -Turn notepad Stop-proces

Alegerea a doua

Get-WmiObject - Clasa Win32_Process -Filter "name = 'notepad.exe" "| Invoke-WmiMethod - Termină

Alegerea a treia

Get-Process -Turn notepad ForEach-Object -Process $ _.Kill ()

Asta e tot pentru cei de această dată, văd săptămâna viitoare pentru mai multă distracție PowerShell.