18Aug

"Geek" mokykla: mokymasis naudoti objektus "PowerShell"

Objektų supratimas yra viena iš pagrindinių sąvokų "gauti" "PowerShell".Prisijunkite prie mūsų, kai mes ištirti objektus ir kaip jie PowerShell padaryti geriau nei bet kuris kitas apvalkalas ten šiandien.

Būtinai perskaitykite ankstesnius serijos straipsnius:

  • Sužinokite, kaip automatizuoti "Windows" su "PowerShell"
  • Mokymasis naudoti "PowerShell"

kompiliacijas. Visą savaitę visada sekite visas likusias serijos dalis.

Objektai

Ar kada nors susimąstėte, kas nustato "PowerShell" be tradicinio "Linux" apvalkalo kaip "Bash" ar net pasenusią komandų eilutę?Atsakymas yra labai paprastas: tradicinių kriauklių teksto išvestis, todėl sudėtinga daryti tokius dalykus kaip formatavimas ir filtravimas.Žinoma, yra įrankių, padėsiančių jums atlikti darbą( sed ir grep atėjo į galvą), bet dienos pabaigoje, jei norite atlikti bet kokį sunkų teksto analizavimą, reikia žinoti reguliarius išraiškos, pvz.,tavo ranka.

PowerShell naudoja pagrindinę. Net sistemą ir taiko skirtingą požiūrį, naudodamas objektus, o ne tekstus. Objektai yra tik kažko reprezentacija. Jie yra dalių rinkinys ir veiksmai, skirti juos naudoti. Pažvelkime į dviračio dalis ir kaip mes galėtume juos naudoti.

Objektai. Net yra tokie patys, išskyrus du nedidelius skirtumus: "Dalys" vadinamos savybėmis ir "Instrukcijos" vadinami metodais .Jei mes norėjome atstovauti "Windows" paslaugą kaip objektą, mes galime nuspręsti, kad tikslinga jį apibūdinti naudodamas tris ypatybes: paslaugos pavadinimą, būseną ir aprašymą.Mes taip pat turime bendrauti su paslauga, todėl mes galime suteikti objektą "Start", "Stop" ir "Pause" metodą.

Jūs galite pamatyti objekto savybes ir metodus, perduodant jį cmdlet Get-member. Objektai, kuriuos "PowerShell" cmdlet išveda, iš esmės yra ".Net" sistemos tipai, tačiau jūs galite kurti savo objektus, jei reikia naudoti tokią kalbą kaip C # arba naudoti PSObject tipą.

Pipeline

Yra daug "Linux" korpusų su vamzdynu, leidžiančiu išsiųsti teksto, kurį viena komanda išveda kaip įvedimo į kitą komandą vamzdyne."PowerShell" perkelia tai į kitą lygmenį, leidžiantį pasirinkti vieną iš cmdlet išvestų objektų ir perduoti jas į kitą kitą dukterinės cmdlet. Apgaulė yra žinojimas, kokio tipo objektas grąžina cmdlet, o tai labai lengva, kai naudojama cmdlet "Get-Member".

Get-Service |Get-member

Dėl priežasčių, nepatenkančių į šio straipsnio taikymo sritį, savybės ir metodai yra bendrai vadinami klasių nariais, o tai paaiškina, kodėl naudojate cmdlet Get-member, kad gautumėte sąrašą visų metodų ir savybių, kurių turi objektas. Tačiau "cmdlet" "Get-member" taip pat grąžina kitą svarbią informaciją, pagrindinį objekto tipą.Ankstesnėje ekrano kopijoje matome, kad "Get-Service" grąžina tokius objektus:

System. ServiceProcess. ServiceController

Kadangi "PowerShell" siejasi su objektais, o ne su tekstu, ne visi cmdletai gali būti susieti kartu naudojant vamzdyną [1].Tai reiškia, kad turime rasti cmdlet, kuris norėtų priimti dujotiekio objektą System. ServiceProcess. ServiceController.

Get-Command -ParameterType System. ServiceProcess. ServiceController

Atkreipkite dėmesį, kad yra cmdlet "Stop-Service";pažiūrėkime už pagalbą.

Get-Help-Name Apribojimų tarnyba

Atrodo, kad parametras InputObject priima "ServiceController" objektų masyvą kaip įvestą.Paprastai, jei pamatysite parametrą, vadinamą InputObject, jis priims "Pipeline" įvestį, bet tik norime būti, kad pažvelgsime į visišką šio parametro pagalbą.

Get-Help-Name-Stop-Service-Full

Mūsų įtarimai buvo teisingi. Taigi šiuo metu mes žinome:

  • Get-Service grąžina ServiceController objektus
  • Stop-Service turi parametrą, vadinamą InputObject, kuris priima vieną ar daugiau ServiceControllers kaip įvestį.
  • Parametras InputObject priima dujotiekio įvestį.

Naudodamiesi šia informacija galėtume atlikti šiuos veiksmus:

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

Tai viskas, kas šiuo metu yra žmonėms. Kitą kartą mes pažvelgsime į tai, kaip mes galime formuoti, filtruoti ir palyginti objektus Pipeline.

Namų darbas

  • Perskaitykite objekto vamzdyną

Jei turite kokių nors klausimų, galite tweaks man @taybgibb arba tiesiog palikite komentarą.