11Sep

Geeki kool: PowerShelli kollektsioonidega töötamine

Kuna PowerShell põhineb. Net raamistikul ja sisaldab mitmeid teisi tehnoloogiaid, nagu WMI ja CIM, on alati sama asja saavutamiseks rohkem kui üks viis. Tule meiega selle lühikese postituse juurde, kus õpime, kuidas meie ülesandeid täita kõige paremini.

Kindlasti loete seriaale eelnenud artikleid:

  • Õppige Windowsi automatiseerimine PowerShelliga
  • Õppige kasutama PowerShelli moodulid
  • Õppige PowerShellis kasutama Objekte
  • Õppide vormindamine, filtreerimine ja võrdlemine PowerShellis
  • Õppige kasutama Remotingi kasutamistPowerShell
  • PowerShelli kasutamine arvutiteabe hankimiseks

ja jääge häälestatuks ülejäänud sarja kogu nädala jooksul.

Batchmodelite kasutamine

Eelnevast seeriast, kui me tutvustasime teid torujuhtmele, näitasime teile, kuidas saate võtta objekte, mis väljastavad üks cmdlet, ja teisaldada need teisele cmdletule sisendina, kasutades selleks midagi sellist:

Get-Process -Nimi notepad |Stop-Process

See tapaks kõik protsessid nimega notepad. Kuid tõenäoliselt te ei tea, kuidas PowerShell suudab ükskõik missuguse märkmikuga kaasas kanda. Vastus jääb Stop-Processi käskluse abile.

aitab Stop-Process-Full

Kui vaatate süntaksi jaotises viimast koodi rida, näete, et InputObject parameeter võtab vastu objekti tüübi Process [] ja iga kord, kui näete tüüpi, millele järgneb kaks nurksümbolitet see tähendab, et parameeter aktsepteerib eelmise tüübi ühte või mitut -d. Sellisel juhul aktsepteerib ta ühte või mitut protsessi objekti. Tehniliselt ütleme, et InputObject'i cmdlet võtab vastu protsessi massiivi .Kui teil on sellisel viisil partitsioone toetav cmdlet, kasutage seda. See on valik number üks.

WMI

kasutamine Kuigi WMI ei ole Microsofti peakorteri laevaliikluse parimaks tarkvaraks, on see teisel kohal objektide kollektsioonidega töötamise loendist. Võiksime kergesti saada käitamisprotsesside loendist Win32_Prolassi klassi järgmiselt:

Get-WmiObject-Class Win32_Process

Kuna WMI-päring tagastab oma liiki objekti, peate otsima meetodi, mis võib protsessi peatada, nii etlubab toru, mis Get-liikmeks.

Get-WmiObject-klass Win32_Process |Get-member

Paistab, et kõige lähemal peatus on lõpetada meetod, nii et see peab olema see, mis peab olema. WMI Objekti meetodile helistamiseks kasutage seda lihtsalt Invoke-WmiMethodile ja määrake meetodi nimi.

Get-WmiObject-klass Win32_Process -Filter "name = 'notepad.exe'" |Invoke-WmiMethod -Nimi Lõpetage

Suur, et tegi trikk. Kui saate WMI-s 0 ReturnValue, peate lihtsalt meeles pidama, et käsk täideti edukalt.

loendamine

Kui kaht teisest meetodist ei õnnestu, kui sa pead midagi tegema paljudele objektidele, saate kogu objekti loendada ja toimida iga üksiku objekti puhul. Esiteks peate leidma meetodi, mille abil saate ühe protsessi peatada.

Get-protsess |Get-liikme -MemberType meetod

Perfect tundub, et võime kasutada Killi meetodit ja seejärel toru ForEach-Objekti, et neid kõiki tappa.

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

Siin võtsime kõik protsessi objektid, mille Get-Process tagastas ja edastas need ForEach-Objekti cmdletti. Nii nagu ka-objekti-cmdlet, esindasime kõiki objekte, mis olid torujuhtmega $ _, mille abil saime helistada Kill() meetodile. Kõike seda, mida öeldi ja tegi, on kogumite loendamine tunduvalt aeglasem kui ülaltoodud meetoditel ja seda tuleks kasutada ainult viimase tulemuse järgi.

Kokkuvõte

Choice One

Get-Process -Name notepad |Stop-Process

valik kaks

Get-WmiObject-klass Win32_Process -filter "name = 'notepad.exe'" |Invoke-WmiMethod -Nimi Lõpeta

valik Kolm

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

See on kõik selleks ajaks inimestele, näeme järgmisel nädalal rohkem PowerShelli lõbu.