Geek-koulun oppiminen Kuinka käyttää objekteja PowerShellissä
Esineiden ymmärtäminen on yksi PowerShellin saamisen peruskäsitteistä. Liity meihin, kun tutkimme esineitä ja miten he tekevät PowerShellia paremmin kuin mikään muu nykyinen kuori.
Muista lukea sarjan aiemmat artikkelit:
- Opi automatisoimaan Windows PowerShellillä
- Oppiminen käyttämään Cmdlet-tiedostoja PowerShellissä
Ja pysy kuulolla koko sarjan koko viikon ajan.
esineet
Oletko koskaan miettinyt, mikä asettaa PowerShellin pois perinteisestä Linux-kuoresta, kuten Bash, tai jopa vanhasta komentorivistä? Vastaus on todella yksinkertainen: perinteiset kuoret tuottavat tekstin, mikä vaikeuttaa muotoilun ja suodatuksen tekemistä. Tietenkin on olemassa työkaluja, jotka auttavat sinua saamaan tehtävän (sed ja grep tulevat mieleen), mutta päivän päätteeksi, jos haluat tehdä kaikenlaista raskaan tekstin jäsentämistä, sinun täytyy tietää säännöllisiä lausekkeita kuten takana kädestäsi.
PowerShell hyödyntää taustalla olevaa .Net-kehystä ja ottaa toisenlaisen lähestymistavan käyttäen objekteja tekstin sijasta. Objektit ovat vain jotain esitystä. Ne ovat kokoelma osia ja toimia niiden käyttämiseksi. Katsotaanpa polkupyörän osia ja miten voimme käyttää niitä.
.Net-objektit ovat paljon samat, lukuun ottamatta kahta pientä eroa: osia kutsutaan ominaisuudet ja ”Ohjeet” kutsutaan menetelmät. Jos halusimme edustaa Windows-palvelua objektina, saatamme päättää, että se on tarkoituksenmukaista kuvata kolmella ominaisuudella: Palvelun nimi, tila ja kuvaus. Meidän on myös oltava vuorovaikutuksessa palvelun kanssa, joten saatamme antaa objektille Start, Stop ja Pause -menetelmän.
Voit nähdä objektin ominaisuudet ja menetelmät siirtämällä sen Get-Member-cmdletiin. Objektit, joita PowerShell-cmdlet-lähdöt ovat, ovat pääosin .Net-kehyksen taustalajeja, mutta voit luoda omia kohteita, jos tarvitset C # -kielen tai PSObject-tyyppiä.
Putki
On olemassa runsaasti Linux-kuoret, joissa on putkilinja, jonka avulla voit lähettää tekstin, jonka yksi komento antaa, tulona seuraavaan komentoon. PowerShell vie tämän seuraavalle tasolle antamalla voit ottaa objektit, jotka yksi cmdlet-lähdöt antavat, ja siirtää ne tuloksi seuraavaan putkilinjan cmdletiin. Temppu on tietää, millaista objektia cmdlet palaa, mikä on todella helppoa, kun käytät Get-Member-cmdletiä.
Hae palvelu Get-jäsen
Tämän artiklan ulkopuolisista syistä ominaisuuksia ja menetelmiä kutsutaan yhteisesti luokan jäseniksi, mikä selittää, miksi käytät Get-Member-cmdlet-luetteloa saadaksesi luettelon kaikista menetelmistä ja ominaisuuksista, joita objektilla on. Get-Member cmdlet palauttaa kuitenkin myös toisen tärkeän informaation, taustalla olevan objektityypin. Yllä olevassa kuvassa näytämme, että Get-Service palauttaa tyyppiset objektit:
System.ServiceProcess.ServiceController
Koska PowerShell käsittelee objekteja eikä tekstiä, kaikkia cmdlet-tiedostoja ei voi yhdistää toisiinsa putkilinjaa käyttäen [1]. Tämä tarkoittaa, että meidän on löydettävä cmdlet, joka haluaa hyväksyä System.ServiceProcess.ServiceController-objektin putkilinjasta.
Get-Command -ParameterType System.ServiceProcess.ServiceController
Huomaa, että on olemassa cmdlet nimeltään Stop-Service; Katsotaanpa sen apua.
Get-Help -Nimi Stop-Service
Näyttää siltä, että InputObject-parametri ottaa joukon ServiceController-objekteja tulona. Yleensä, jos näet parametrin nimeltä InputObject, se hyväksyy putkilinjan syötteen, mutta vain varmista, että katsotaan täydellistä apua kyseiselle parametrille.
Get-Help -Nimi Stop-Service-Täysi
Meidän epäilyt olivat oikein. Joten tässä vaiheessa tiedämme seuraavat:
- Get-Service palauttaa ServiceController-objektit
- Stop-Service-toiminnolla on parametri nimeltä InputObject, joka hyväksyy yhden tai useamman ServiceControllerin tulona.
- InputObject-parametri hyväksyy putkilinjan tulon.
Käyttämällä näitä tietoja voisimme tehdä seuraavat toimet:
Get-Service -nimi "Apple Mobile Device" | Stop-palvelu
Se on kaikki tällä kertaa. Seuraavan kerran tarkastelemme, miten voimme muotoilla, suodattaa ja verrata putkilinjan esineitä.
Kotitehtävät
- Lue objektin putkilinja
Jos sinulla on kysyttävää, voit piilottaa minulle @taybgibb tai jättää kommentin.