Geek Kool Kollektsioonidega töötamine PowerShellis
Kuna PowerShell põhineb .Net Frameworkil ja sisaldab mitmeid teisi tehnoloogiaid, nagu WMI ja CIM, on sama asi alati rohkem kui üks viis. Tulge liituda meiega selle lühikese ametikoha jaoks, kus me õpime, kuidas valida parim viis meie ülesannete täitmiseks.
Lugege kindlasti seeria eelmisi artikleid:
- Lugege, kuidas Windowsi PowerShelli abil automatiseerida
- Õppimine kasutama Cmdleti PowerShellis
- Õppimine, kuidas kasutada objekte PowerShellis
- Vormindamine, filtreerimine ja võrdlemine PowerShellis
- Õpi kasutama Remotingit PowerShellis
- PowerShelli kasutamine arvutiteabe saamiseks
Ja hoia ülejäänud sarja jaoks terve nädal.
Partii käsikirjade kasutamine
Varem selles seerias, kui tutvustasime teid torujuhtmele, näitasime teile, kuidas te saate võtta ühe cmdleti väljundiga objektid ja edastada need sisendina teise cmdletile, kasutades selleks midagi sellist:
Get-Process -Nime notepad | Stop-protsess
See tapaks mis tahes protsessi nimega “notepad”. Kuid te olete ilmselt mõelnud, kuidas PowerShell suudab ühe käskuga iga notepadi eksemplari tappa. Vastus on Stop-Process cmdleti abiga.
aidata Stop-Process -Täielik
Kui vaatate süntaksiosa koodi viimast rida, näete, et parameeter InputObject aktsepteerib tüübi Protsess [] ja alati, kui näete tüüpi, millele järgneb kaks ruuduklambrit, tähendab, et parameeter aktsepteerib üks või mitu eelnevat tüüpi. Sellisel juhul võtab ta vastu ühe või mitu protsessiobjekti. Tehniliselt öeldakse, et cmdlet InputObject aktsepteerib protsessi massiivi. Kui teil on cmdlet, mis sellisel viisil partiitoiminguid toetab, kasutage seda. See on valik number üks.
WMI kasutamine
Kuigi WMI ei ole parim tehnoloogia Microsofti peakorterist saadetavaks tehnoloogiaks, on see teisel kohal objektide kollektsioonidega töötamise nimekirjas. Me võime kergesti saada Win32_Process klassi jooksvate protsesside nimekirja:
Get-WmiObject-klass Win32_Process
Kuna WMI päring tagastab oma laadi objekti, peate otsima meetodi, mis võib protsessi peatada, nii et lasete selle hankida kasutajale Get-Member.
Get-WmiObject-klass Win32_Process | Get-Member
Paistab, et lähim asi on lõpetada meetod, nii et see peab olema üks. WMI objektil meetodi helistamiseks piirduge lihtsalt Invoke-WmiMethodiga ja määrake meetodi nimi.
Get-WmiObject-klass Win32_Process -filter “name = 'notepad.exe'” | Invoke-WmiMethod -Nimi Lõpeta
Suur, see tegi trikki. Kui saad WMI-s 0-st väärtuse ReturnValue, pea meeles pidama, et käsk edukalt sooritatud.
Loendamine
Ülejäänud kahe meetodi puudumisel, kui teil on vaja midagi teha objektide hulga kohta, saate loendada kogu objekti ja tegutseda iga üksiku objekti suhtes. Kõigepealt peate leidma meetodi, mida sa kasutaksid ühe protsessi peatamiseks.
Get-protsess Get-Member-liikme tüüp
Täiuslik, näib, et saame kasutada Kill-meetodit ja seejärel toreda ForEach-Objecti, et neid kõiki tappa.
Get-Process -Nime notepad | ForEach-Object-Protsess $ _. Kill ()
Siin me võtsime kõik protsessi objektid, mille Get-Process tagastas ja edastas need ForEach-Object cmdletile. Sarnaselt sellele, kus cmdleti on-Object-objekt, esindasime iga torujuhtme objekti objektiga $ _, mida me võime helistada Kill () meetodile. Kõik, mis öeldi ja tehtud, on kogumise loendamine palju aeglasem kui ülaltoodud meetodid ja seda tuleks kasutada ainult viimase tulemuse kujul.
Kokkuvõte
Üks valik
Get-Process -Nime notepad | Stop-protsess
Teine valik
Get-WmiObject-klass Win32_Process -filter “name = 'notepad.exe'” | Invoke-WmiMethod -Nimi Lõpeta
Valik kolm
Get-Process -Nime notepad | ForEach-Object-Protsess $ _. Kill ()
See on kõik selleks ajaks inimesed, näeme sind järgmisel nädalal rohkem PowerShelli lõbusaks.