Geeki kool: PowerShelli kollektsioonidega töötamine

Sisukord:

Geeki kool: PowerShelli kollektsioonidega töötamine
Geeki kool: PowerShelli kollektsioonidega töötamine

Video: Geeki kool: PowerShelli kollektsioonidega töötamine

Video: Geeki kool: PowerShelli kollektsioonidega töötamine
Video: Howto install Ambari on Ubuntu - YouTube 2024, Aprill
Anonim
Kuna PowerShell põhineb.Net raamistikul ja sisaldab mitmesuguseid muid 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.
Kuna PowerShell põhineb.Net raamistikul ja sisaldab mitmesuguseid muid 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.

Vaadake kindlasti eelmise sarja artikleid:

  • Lugege, kuidas automatiseerida Windows PowerShelliga
  • Õpime PowerShellis kasutama kommuteid
  • PowerShellis Objektide kasutamise õppimine
  • PowerShellis õppimise vormindamine, filtreerimine ja võrdlemine
  • Õpi Remotingi kasutamist PowerShellis
  • PowerShelli kasutamine arvutiteabe hankimiseks

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

Partii koodide kasutamine

Varasemas seerias, kui tutvustasime teid torujuhtmele, näitasime teile, kuidas saate võtta üksikuid cmdlet väljundeid ja edastada need mõne teise cmdleti sisendina, kasutades selleks midagi sellist:

Get-Process -Name 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.

help Stop-Process –Full

Image
Image

Kui vaatate süntaksi jaos olevat koodi viimast rida, näete, et parameeter InputObject nõustub tüübiga Process ja kui näete tüüpi, millele järgneb kaks sellist nurksulti, siis tähendab see, et parameeter nõustub üks või mitu eelmise tüübi kohta. Sellisel juhul aktsepteerib ta ühte või mitut protsessi objekti. Tehniliselt öeldes, et InputObject'i cmdlet võtab protsessi vastu massiiv. Kui teil on sellisel viisil partitsioone toetav cmdlet, kasutage seda. See on valik number üks.

WMI kasutamine

Kuigi WMI ei ole Microsofti peakorterist laevaliiklusest parim tehnoloogia, on see teisel kohal objektide kollektsioonidega töötamise loendist. Klassi Win32_Process võib hõlpsasti saada tööprotsesside loendist nii:

Get-WmiObject –Class Win32_Process

Kuna WMI päring tagastab oma tüüpi objekti, peate otsima meetodi, mis võib protsessi peatada, nii et saadab toru, mis Get-liikmeks.
Kuna WMI päring tagastab oma tüüpi objekti, peate otsima meetodi, mis võib protsessi peatada, nii et saadab toru, mis Get-liikmeks.

Get-WmiObject –Class Win32_Process | Get-Member

Paistab, et kõigepealt lõpetada on lõpetamise meetod, nii et see peab olema üks. WMI Objekti meetodile helistamiseks kasutage seda lihtsalt Invoke-WmiMethodile ja määrake meetodi nimi.
Paistab, et kõigepealt lõpetada on lõpetamise meetod, nii et see peab olema üks. WMI Objekti meetodile helistamiseks kasutage seda lihtsalt Invoke-WmiMethodile ja määrake meetodi nimi.

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

Tore, et see oli trikk. Kui saate WMI-s ReturnValue 0, siis pidage meeles, et käsk käivitati edukalt.
Tore, et see oli trikk. Kui saate WMI-s ReturnValue 0, siis pidage meeles, et käsk käivitati edukalt.

Loendamine

Kui kaht ülejäänud meetodit ei õnnestu, kui sa pead midagi tegema paljudele objektidele, võite loetleda kogu objekti ja tegutseda iga üksiku objekti puhul. Esiteks peate leidma meetodi, mille abil saate ühe protsessi peatada.

Get-Process | Get-Member -MemberType Method

Ideaalne, tundub, et võime kasutada Killi meetodit ja seejärel toru ForEach-Objekti, et neid kõiki tappa.
Ideaalne, 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 tagasi saadeti ja edastasid nad ForEach-Objekti cmdlet-le. 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 tulemusena.
Siin võtsime kõik protsessi objektid, mille Get-Process tagasi saadeti ja edastasid nad ForEach-Objekti cmdlet-le. 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 tulemusena.

Kokkuvõte

Valik üks

Get-Process -Name notepad | Stop-Process

Valik kaks

Get-WmiObject -Class Win32_Process -Filter “name=’notepad.exe'” | Invoke-WmiMethod -Name Terminate

Kolm valikut

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

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

Soovitan: