11Sep
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.