Geek Šola učenje, kako uporabljati predmete v PowerShell
Razumevanje predmetov je eden od temeljnih konceptov »pridobivanja« PowerShell. Pridružite se nam, ko raziskujemo predmete in kako PowerShell postane boljši od katere koli druge lupine danes.
Preberite prejšnje članke v seriji:
- Naučite se avtomatizirati Windows s PowerShell
- Učenje uporabe ukaznih vrstic v PowerShell
In ostanite z nami do konca tedna.
Predmeti
Ste se kdaj spraševali, kaj loči PowerShell od tradicionalne lupine Linuxa, kot je Bash, ali celo zapuščina ukaznega poziva? Odgovor je zelo preprost: tradicionalna izhodna besedila ukaznih lupin, zaradi česar je težko narediti stvari, kot so oblikovanje in filtriranje. Seveda, obstajajo orodja, ki vam pomagajo, da opravite delo (sed in grep pridejo na misel), vendar na koncu dneva, če želite narediti kakršnokoli težko razčlenjevanje besedila, morate poznati regularne izraze, kot je nazaj.
PowerShell izkorišča prednosti osnovnega ogrodja .Net in ima drugačen pristop, ki uporablja predmete namesto besedila. Predmeti so samo predstavitev nečesa. So zbirka delov in dejanj za njihovo uporabo. Oglejmo si dele kolesa in kako jih lahko uporabimo.
Predmeti v .Netu so enaki, razen dveh majhnih razlik: kličejo se »Deli« lastnosti in "Navodila" metod. Če želimo predstaviti storitev Windows kot objekt, se lahko odločimo, da jo je primerno opisati s tremi lastnostmi: Service Name, State in Description. Prav tako moramo sodelovati s storitvijo, zato lahko predmetu damo metodo Start, Stop in Pause.
Lastnosti in metode predmeta si lahko ogledate tako, da jih posredujete v »cmdlet« Get-Member. Objekti, ki jih PowerShell cmdlet izpiše, so v veliki meri osnovni tipi iz ogrodja .Net, vendar lahko ustvarite lastne objekte, če morate uporabiti jezik, kot je C #, ali uporabite tip PSObject..
Cevovod
Obstaja veliko Linuxovih lupin s cevovodom, ki vam omogočajo, da pošljete besedilo, ki ga en ukaz odda kot vhod v naslednji ukaz v cevovodu. PowerShell to prevzame na naslednjo stopnjo, tako da vam omogoča, da vzamete predmete, ki jih ena cmdlet izpiše, in jih posredujete kot vnos naslednjemu cmdletu v cevovodu. Trik je vedeti, kakšen tip predmeta se vrne v cmdlet, kar je zelo enostavno, ko uporabljate cmdlet Get-Member.
Get-Service | Get-Member
Zaradi razlogov, ki niso zajeti v tem članku, so lastnosti in metode skupno imenovani člani razreda, kar pojasnjuje, zakaj uporabite cmdlet Get-Member, da dobite seznam vseh metod in lastnosti, ki jih ima objekt. Vendar pa cmdlet Get-Member vrne še en pomemben del informacije, osnovni tip objekta. V zgornjem posnetku zaslona lahko vidimo, da Get-Service vrne predmete tipa:
System.ServiceProcess.ServiceController
Ker se PowerShell ukvarja s predmeti, ne pa z besedilom, ni mogoče povezati vseh cmdlet z uporabo cevovoda [1]. To pomeni, da moramo najti cmdlet, ki želi sprejeti objekt System.ServiceProcess.ServiceController iz cevovoda.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Opazite, da je cmdlet imenovan Stop-Service; Oglejmo si pomoč za to.
Get-Help -Name Stop-Service
Izgleda, da parameter InputObject vzame niz objektov ServiceController kot vhod. Običajno, če vidite parameter InputObject, bo sprejel vhod iz cevovoda, vendar samo, da se prepričamo, da si ogledamo polno pomoč za ta parameter..
Get-HelpName Stop-Service-Full
Naši sumi so bili pravilni. Torej na tej točki poznamo naslednje:
- Get-Service vrne ServiceController objekte
- Stop-Service ima parameter InputObject, ki sprejme en ali več ServiceControlerjev kot vhod.
- Parameter InputObject sprejme vnos cevovoda.
Z uporabo teh podatkov lahko naredimo naslednje:
Get-Service-Ime "Apple Mobile Device" | Stop-Service
To je vse za tokrat. Naslednjič pogledamo, kako lahko oblikujemo, filtriramo in primerjamo objekte v cevovodu.
Domača naloga
- Preberite na plinovodu Objekt
Če imate kakršna koli vprašanja, me lahko tweetate @taybgibb ali pa pustite komentar.