18Aug

Geek šola: učenje uporabe objektov v PowerShell

Razumevanje predmetov je eden od temeljnih konceptov za "pridobivanje" PowerShell. Pridružite se nam, ko raziskujemo predmete in kako PowerShell naredijo boljše od katere koli druge lupine danes.

Bodite prepričani, da preberete prejšnje članke v seriji:

  • Več o tem, kako avtomatizirati Windows z PowerShell
  • Učenje za uporabo Cmdlets v PowerShell

In ostanite nastavljeni za preostanek serije ves teden.

Predmeti

Ste se kdaj spraševali, kaj postavlja PowerShell ločeno od tradicionalne lupine Linuxa, kot je Bash, ali celo zapuščenega ukaznega poziva? Odgovor je zelo preprost: izhodno besedilo tradicionalnih lupin, zaradi česar je težko narediti stvari, kot so oblikovanje in filtriranje. Seveda obstajajo orodja, ki vam pomagajo doseči to nalogo( sed in grep se spomnite), vendar ob koncu dneva, če želite narediti kakršno koli težavo razčlenjevanja besedila, morate poznati regularne izraze, kot je npr.nazaj v roko.

PowerShell izkorišča osnovni okvir. Net in ima drugačen pristop, z uporabo predmetov namesto besedila. Objekti so le predstavitev nečesa. So zbirka delov in dejanj, ki jih uporabljajo. Oglejmo si dele kolesa in kako jih lahko uporabimo.

Objekti v. Net so zelo enaki, razen dveh majhnih razlik: "deli" se imenujejo lastnosti in "Navodila" se imenujejo metode .Če želimo predstaviti storitev Windows kot predmet, se lahko odločimo, da je primerno opisati z uporabo treh lastnosti: Ime storitve, stanje in opis. Prav tako moramo sodelovati s storitvijo, zato lahko objektu damo Start, Stop in Pause.

Značilnosti in metode predmeta si lahko ogledate tako, da jih prenesete v cmdlet Get-Member. Objekti, ki jih izpisi cmdlet PowerShell v veliki meri temeljijo na vrsticah iz okvira. Net, lahko pa ustvarite lastne predmete, če morate uporabiti jezik, kot je C #, ali uporabite vrsto PSObject.

Pipeline

Obstaja veliko lupin Linux z cevovoda, ki vam omogoča, da pošljete besedilo, ki ga en ukaz izpiše kot vhod v naslednji ukaz v plinovodu. PowerShell sprejme to na naslednjo stopnjo, tako da vam omogoča, da vzamete predmete, ki jih izstavlja en cmdlet, in jih prenesti kot vhod v naslednjo cmdlet v plinovodu. Trik je vedeti, kakšno vrsto predmeta se vrne cmdlet, kar je zelo enostavno, če uporabljate cmdlet Get-Member.

Get-Service |Get-Member

Zaradi razlogov, ki niso zajeti v tem členu, se lastnosti in metode skupaj imenujejo člani razreda, kar pojasnjuje, zakaj uporabljate cmdlet Get-Member, da dobite seznam vseh metod in lastnosti, ki jih ima objekt. Vendar pa tudi cmdlet Get-Member vrne še en pomemben del informacij, osnovni tip predmeta. V zgornjem posnetku zaslona lahko vidimo, da Get-Service vrne predmete tipa:

System. ServiceProcess. ServiceController

Ker PowerShell obravnava predmete in ne besedilo, ni mogoče povezati vseh cmdletov skupaj z uporabo plinovoda [1].To pomeni, da moramo najti cmdlet, ki želijo sprejeti element sistema System. ServiceProcess. ServiceController iz cevovoda.

Get-Command -ParameterType System. ServiceProcess. ServiceController

Obvestilo, da obstaja cmdlet, imenovan Stop-Service;Poglejmo si pomoč za to.

Get-Help -Name Stop-Service

Izgleda, da parameter InputObject zajema vnos nizov objektov ServiceController. Običajno, če vidite parameter, ki se imenuje InputObject, bo sprejel vhod iz Pipeline, vendar samo, da se prepričamo, da si oglejte celotno pomoč za ta parameter.

Get-Help -Name Stop-Service-Popolnoma

Naši sumi so bili pravilni. Torej v tem trenutku poznamo naslednje:

  • Get-Service vrne objekti ServiceController
  • Stop-Service ima parameter, imenovan InputObject, ki sprejema enega ali več ServiceControllers kot vhod.
  • Parameter InputObject sprejema dovod plinovoda.

S pomočjo teh informacij lahko naredimo naslednje:

Get-Service-Namesto "Apple Mobile Device" |Stop-Service

To je vse za tokrat ljudje. Naslednjič, ko pogledamo, kako lahko oblikujemo, filtriramo in primerjamo objekte v Pipeline.

Domače naloge

  • Preberite na Object Pipeline

Če imate kakršnakoli vprašanja, me lahko tweet @taybgibb ali pustite komentar.