Historiallisesti Unix-järjestelmien komentorivin apuohjelmat ovat kehittyneet paremmin kuin Windowsissa, mutta uuden ratkaisun myötä tilanne on muuttunut.
Windows PowerShellin avulla järjestelmänvalvojat voivat automatisoida useimmat rutiinitehtävät. Sen avulla voit muuttaa asetuksia, pysäyttää ja käynnistää palveluita sekä huoltaa useimpia asennettuja sovelluksia. Olisi väärin nähdä sininen ikkuna toiseksi komentotulkina. Tämä lähestymistapa ei heijasta Microsoftin ehdottamien innovaatioiden ydintä. Itse asiassa Windows PowerShellin mahdollisuudet ovat paljon laajemmat: lyhyessä artikkelisarjassa yritämme selvittää, miten Microsoftin ratkaisu eroaa meille tutuimmista työkaluista.
Tärkeimmät ominaisuudet
Tietenkin Windows PowerShell on ensisijaisesti komentosarjakuori, joka on alun perin rakennettu .NET Frameworkiin ja myöhemmin .NET Coreen. Toisin kuin tekstidataa hyväksyvät ja palauttavat komentotulkit, Windows PowerShell toimii .NET-luokkien kanssa, joilla on ominaisuuksia ja menetelmiä. PowerShell antaa sinun suorittaa yleisiä komentoja ja antaa sinulle myös pääsyn COM-, WMI- ja ADSI-objekteihin. Se käyttää erilaisia tallennusvälineitä, kuten tiedostojärjestelmää tai Windowsin rekisteriä, joihin pääsee ns. tarjoajat. On syytä huomioida mahdollisuus upottaa PowerShell-suoritettavat komponentit muihin sovelluksiin erilaisten toimintojen toteuttamiseksi, mm. graafisen käyttöliittymän kautta. Myös päinvastoin: monet Windows-sovellukset tarjoavat pääsyn hallintaliittymiinsä PowerShellin kautta.
Windows PowerShellin avulla voit:
- Muuta käyttöjärjestelmän asetuksia;
- Hallitse palveluita ja prosesseja;
- Määritä palvelimen roolit ja komponentit;
- Asenna ohjelmistot;
- Hallitse asennettuja ohjelmistoja erityisten rajapintojen kautta;
- Upota suoritettavat komponentit kolmannen osapuolen ohjelmiin;
- Luo komentosarjoja hallintatehtävien automatisoimiseksi;
- Työskentele tiedostojärjestelmän, Windowsin rekisterin, varmennevaraston jne. kanssa.
Shell ja kehitysympäristö
Windows PowerShellia on kahdessa muodossa: komentokuljella varustetun konsoliemulaattorin lisäksi on integroitu komentosarjaympäristö (ISE). Pääset komentorivikäyttöliittymään valitsemalla sopivan pikakuvakkeen Windows-valikosta tai suorittamalla powershell.exe Suorita-valikosta. Näytölle tulee sininen ikkuna, jonka ominaisuudet eroavat huomattavasti antediluvian cmd.exe-tiedoston ominaisuuksista. Unix-järjestelmien komentotulkkien käyttäjille on tuttu automaattinen täydennys ja muita ominaisuuksia.
Jotta voit työskennellä kuoren kanssa, sinun on muistettava joitain pikanäppäimiä:
- Ylös- ja alanuolet vierittävät historiaa toistaaksesi aiemmin kirjoitetut komennot;
- Oikea nuoli rivin lopussa kirjoittaa uudelleen edellisen komennon merkki merkiltä;
- Ctrl+Home poistaa kirjoitetun tekstin kohdistimen paikasta rivin alkuun;
- Ctrl+End poistaa tekstiä kursorista rivin loppuun.
F7 näyttää ikkunan, jossa on kirjoitetut komennot, ja voit valita niistä yhden. Konsoli toimii myös tekstin valinnassa hiirellä, kopioi-liitä, kohdistimen sijoittaminen, poisto, askelpalautin - kaikki mistä pidämme.
Windows PowerShell ISE on täydellinen kehitysympäristö, jossa on välilehdillä ja syntaksilla korostettu koodieditori, komentojen rakentaja, sisäänrakennettu debuggeri ja muita ohjelmointinautintoja. Jos kirjoitat kehitysympäristön editorissa komennon nimen perään yhdysviivan, saat avattavassa luettelossa kaikki käytettävissä olevat vaihtoehdot tyypin mukaan. Voit käynnistää PowerShell ISE:n joko järjestelmävalikon pikakuvakkeen kautta tai käyttämällä suoritettavaa tiedostoa powershell_ise.exe.
cmdletit
Windows PowerShellissä ns. cmdletit. Nämä ovat erikoistuneita .NET-luokkia, jotka tarjoavat erilaisia toimintoja. Niiden nimi on Action-Object (tai verbi-substantiivi, jos haluat), ja väliviivalla erotettu linkki muistuttaa predikaattia ja subjektia luonnollisen kielen lauseissa. Esimerkiksi Get-Help tarkoittaa kirjaimellisesti "Get-Help" tai PowerShell-kontekstissa "Show-Help". Itse asiassa tämä on analogi Man-komennolle Unix-järjestelmissä, ja PowerShellin käsikirjat on pyydettävä tällä tavalla, ei kutsumalla cmdlet-komentoja --help- tai /?-näppäimellä. Älä unohda PowerShellin online-dokumentaatiota: Microsoft on antanut sen melko yksityiskohtaisesti.
Get-toiminnon lisäksi cmdletissä käytetään muita verbejä toimintojen kuvaamiseen (eikä vain verbejä tarkalleen ottaen). Alla olevassa luettelossa annamme joitain esimerkkejä:
Add
- lisätä;
Clear
- asia selvä;
Enable
- kiihottua;
Disable
- Kytke pois päältä;
New
- luoda;
Remove
- poistaa;
Set
- kysyä;
Start
- juosta;
Stop
- lopettaa;
Export
- vienti;
Import
- tuonti.
On olemassa järjestelmä-, käyttäjä- ja valinnaisia cmdlet-komentoja: suorituksen seurauksena ne kaikki palauttavat objektin tai objektijoukon. Ne eivät ole kirjainkoolla, ts. komentotulkin näkökulmasta Get-Help:n ja get-helpin välillä ei ole eroa. Merkkiä ';' käytetään erottamiseen, mutta se on pakollinen vain, jos samalla rivillä suoritetaan useita cmdlet-komentoja.
Windows PowerShell-cmdletit on ryhmitelty moduuleiksi (NetTCPIP, Hyper-V jne.), ja siellä on Get-Command-cmdlet, jonka avulla voit etsiä kohteen ja toiminnon mukaan. Voit näyttää ohjeen seuraavasti:
Get-Help Get-Command
Oletusarvoisesti komento näyttää lyhyen ohjeen, mutta parametrit (argumentit) välitetään cmdleteille tarpeen mukaan. Niiden avulla saat esimerkiksi yksityiskohtaisen (parametri -Detailed) tai täyden (parametri -Full) ohjeen sekä näyttää esimerkkejä (parametri -Esimerkit):
Get-Help Get-Command -Examples
Windows PowerShellin ohje päivitetään Update-Help-cmdletillä. Jos komentorivi osoittautuu liian pitkäksi, cmdlet-argumentit voidaan siirtää seuraavaan kirjoittamalla palvelumerkki "`" ja painamalla Enter - komennon kirjoittaminen yhdelle riville ja jatkaminen toisella ei toimi.
Tässä on esimerkkejä yleisistä cmdlet-komennoista:
Get-Process
- näyttää käynnissä olevat prosessit järjestelmässä;
Get-Service
— näyttää palvelut ja niiden tila;
Get-Content
- näyttää tiedoston sisällön.
Usein käytetyille cmdleteille ja ulkoisille apuohjelmille Windows PowerShellissä on lyhyitä synonyymejä - aliaksia (englannista. Alias). Esimerkiksi dir on Get-ChildItem-alias. Synonyymien luettelo sisältää myös analogeja Unix-järjestelmien komentoille (ls, ps jne.), ja Get-Help-cmdlet kutsuu help-komennolla. Täydellistä luetteloa synonyymeistä voi tarkastella Get-Alias-cmdletillä:
Skriptit, funktiot, moduulit ja PowerShell-kieli
Windows PowerShell-komentosarjat tallennetaan tekstitiedostoina, joiden tunniste on .ps1. Et voi käynnistää niitä kaksoisnapsauttamalla: sinun on napsautettava hiiren kakkospainikkeella avataksesi pikavalikon ja valitaan "Suorita PowerShellissä". Konsolissa sinun on joko määritettävä komentosarjan koko polku tai siirryttävä sopivaan hakemistoon ja kirjoitettava tiedoston nimi. Komentosarjojen suorittamista rajoittaa myös järjestelmäkäytäntö, ja voit tarkistaa nykyiset asetukset käyttämällä Get-ExecutionPolicy-cmdlet-komentoa, joka palauttaa yhden seuraavista arvoista:
Restricted
— komentosarjojen käynnistäminen on poissa käytöstä (oletusarvoisesti);
AllSigned
- vain luotettavan kehittäjän allekirjoittamien komentosarjojen käynnistäminen on sallittua;
RemoteSigned
- saa suorittaa allekirjoitettuja ja omia komentosarjoja;
Unrestricted
- saa suorittaa mitä tahansa komentosarjoja.
Ylläpitäjällä on kaksi vaihtoehtoa. Turvallisin on skriptien allekirjoittaminen, mutta tämä on melko vakava noituus - käsittelemme sitä tulevissa artikkeleissa. Otetaan nyt vähäisen vastustuksen tie ja muutetaan politiikkaa:
Set-ExecutionPolicy RemoteSigned
PowerShell on suoritettava järjestelmänvalvojana tätä varten, vaikka voit muuttaa nykyisen käyttäjän käytäntöä erityisellä asetuksella.
Skriptit kirjoitetaan olio-ohjelmointikielellä, jonka komennot on nimetty samalla periaatteella kuin aiemmin käsitellyt cmdletit: "Action-Object" ("Verbi-Noun"). Sen päätarkoitus on automatisoida hallinnollisia tehtäviä, mutta se on täysimittainen tulkittu kieli, jossa on kaikki tarvittavat konstruktit: ehdollinen hyppy, silmukat, muuttujat, taulukot, objektit, virheiden käsittely jne. Kaikki tekstieditorit sopivat komentosarjaan, mutta on parasta käyttää Windows PowerShell ISE:tä.
Voit siirtää parametreja komentosarjalle, tehdä niistä pakollisia ja asettaa oletusarvoja. Lisäksi Windows PowerShell mahdollistaa funktioiden luomisen ja kutsumisen samalla tavalla kuin cmdlet-komentokomentot käyttämällä Function-rakennetta ja kiharoita. Toimintoja sisältävää komentosarjaa kutsutaan moduuliksi, ja sen laajennus on .psm1. Moduulit on tallennettava PowerShell-ympäristömuuttujissa määritettyihin hakemistoihin. Voit tarkastella niitä seuraavalla komennolla:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSize
kuljetin
Viimeisessä esimerkissä olemme käyttäneet Unix-kuoren käyttäjille tuttua rakennetta. Windows PowerShellissä pystypalkki mahdollistaa myös yhden komennon tulosteen välittämisen toisen komennon tuloon, mutta liukuhihnan toteutuksessa on merkittävä ero: emme enää puhu merkkijoukosta tai jonkinlaisesta komennosta. teksti. Sisäänrakennetut cmdlet-komentot tai käyttäjän määrittämät funktiot palauttavat objekteja tai objektiryhmiä ja voivat myös vastaanottaa niitä syötteenä. Kuten Bourne-kuori ja sen monet seuraajat, PowerShell tekee monimutkaisista tehtävistä helpompaa liukuhihnan avulla.
Yksinkertaisin esimerkki putkilinjasta näyttää tältä:
Get-Service | Sort-Object -property Status
Ensin suoritetaan Get-Service-cmdlet, ja sitten kaikki sen vastaanottamat palvelut välitetään Sort-Object-cmdletille Tila-ominaisuuden mukaan lajittelua varten. Se, mihin argumenttiin liukuhihnan edellisen osan tulos välitetään, riippuu sen tyypistä - yleensä se on InputObject. Tätä ongelmaa käsitellään yksityiskohtaisemmin PowerShell-ohjelmointikielelle omistetussa artikkelissa.
Halutessasi voit jatkaa ketjua ja välittää Sort-Object -operaation tuloksen toiseen cmdlet-komennolla (ne suoritetaan vasemmalta oikealle). Muuten, Windows-käyttäjillä on pääsy myös kaikille Unixoideille tuttuihin sivutuskonstruktioihin:
Get-Service | Sort-Object -property Status | more
Tehtävien suorittaminen taustalla
Melko usein on tarpeen suorittaa tietty komento taustalla, jotta ei odoteta sen suorittamisen tulosta shell-istunnossa. Windows PowerShellissä on useita cmdlet-komentoja tähän tapaukseen:
Start-Job
- taustatehtävän käynnistäminen;
Stop-Job
— lopeta taustatehtävä;
Get-Job
— tarkastella taustatehtävien luetteloa;
Receive-Job
— taustatehtävän suorituksen tuloksen tarkasteleminen;
Remove-Job
— taustatehtävän poistaminen;
Wait-Job
- taustatehtävän siirtäminen takaisin konsoliin.
Taustatehtävän aloittamiseksi käytämme Start-Job cmdlet-komentoa ja määritämme komennon tai komentojoukon aaltosulkeissa:
Start-Job {Get-Service}
Windows PowerShellin taustatehtäviä voidaan käsitellä niiden nimet tietämällä. Opitaanpa ensin näyttämään ne:
Get-Job
Näytetään nyt työn Job1 tulos:
Receive-Job Job1 | more
Kaikki on melko yksinkertaista.
Etäkomennon suoritus
Windows PowerShellin avulla voit suorittaa komentoja ja komentosarjoja ei vain paikallisessa tietokoneessa, vaan myös etätietokoneessa ja jopa kokonaisessa koneryhmässä. On olemassa useita tapoja tehdä tämä:
- Monilla cmdlet-komennoilla on parametri
-ComputerName
, mutta tällä tavalla se ei toimi esimerkiksi kuljettimen luomisessa; - Cmdlet
Enter-PSSession
voit luoda interaktiivisen istunnon etäkoneella; - cmdlet-komennolla
Invoke-Command
voit suorittaa komentoja tai komentosarjoja yhdessä tai useammassa etätietokoneessa.
PowerShellin versiot
PowerShell on muuttunut paljon ensimmäisestä julkaisustaan vuonna 2006. Työkalu on saatavilla useisiin eri laitteistoalustoilla toimiviin järjestelmiin (x86, x86-64, Itanium, ARM): Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008/2008 R2, Windows 7, Windows 8, Windows 8.1, Windows RT, Windows RT 8.1, Windows Server 2012/2012 R2, Windows 10, Windows Server 2016, GNU/Linux ja OS X. Uusin versio 6.2, julkaistu 10. tammikuuta 2018. Aiemmille versioille kirjoitetut komentosarjat toimivat todennäköisesti myöhemmissä versioissa, mutta backporting voi olla ongelmallista, koska PowerShell on ottanut käyttöön suuren määrän uusia cmdlet-komentoja kehitysvuosien aikana. Voit selvittää tietokoneeseen asennetun komentotulkin version käyttämällä sisäänrakennetun muuttujan $PSVersionTable PSVersion-ominaisuutta:
$PSVersionTable.PSVersion
Voit myös käyttää cmdlet-komentoa:
Get-Variable -Name PSVersionTable –ValueOnly
Sama tehdään Get-Host-cmdletillä. Itse asiassa vaihtoehtoja on monia, mutta käyttääksesi niitä sinun on opittava PowerShell-ohjelmointikieli, jonka teemme
Tulokset
Microsoft on onnistunut luomaan todella tehokkaan kuoren, jossa on kätevä integroitu ympäristö komentosarjojen kehittämiseen. Se eroaa meille Unix-maailmassa tutuista työkaluista syvällä integraatiolla Windows-perheen käyttöjärjestelmiin sekä niille tarkoitettuihin ohjelmistoihin ja .NET Core -alustaan. PowerShellia voidaan kutsua oliopohjaiseksi shelliksi, koska cmdlet-komentot ja käyttäjän määrittämät funktiot palauttavat objekteja tai objektiryhmiä ja voivat ottaa ne syötteenä. Mielestämme kaikkien Windows-palvelinten järjestelmänvalvojien pitäisi omistaa tämä työkalu: on kulunut aika, jolloin he pystyivät pärjäämään ilman komentoriviä. Edistynyttä konsolin kuorta tarvitaan erityisesti
Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn.
Mitä aiheita tulisi käsitellä ensimmäisenä sarjan seuraavissa artikkeleissa?
-
53,2%Ohjelmointi PowerShell123:ssa
-
42,4%PowerShell98:n funktiot ja moduulit
-
22,1%Kuinka allekirjoittaa omat käsikirjoituksesi?51
-
12,1%Työskentely tietovarastojen kanssa palveluntarjoajien (tarjoajien) kautta28
-
57,6%Tietokoneen hallinnan automatisointi PowerShell133:lla
-
30,7%Ohjelmiston hallinta ja PowerShell-suoritustiedostojen upottaminen kolmannen osapuolen tuotteisiin71
231 käyttäjää äänesti. 37 käyttäjää pidättyi äänestämästä.
Lähde: will.com