Geek School Naučite se avtomatizirati Windows s PowerShell
V tej izdaji Geek School vam bomo pomagali razumeti močan PowerShell skriptni jezik, ki je vgrajen prav v Windows, in je zelo koristno poznati v IT okolju..
Čeprav ta serija ni strukturirana okoli izpita, je učenje PowerShell ena najpomembnejših stvari, ki jih lahko naredite kot skrbnik omrežja, tako da, če obstaja ena stvar, ki jo želite naučiti pomagati vaši IT karieri, je to to. Poleg tega je zelo zabavno.
Uvod
PowerShell je najmočnejše orodje za avtomatizacijo, ki ga ponuja Microsoft, in lupine ter skriptni jezik.
Upoštevajte, da ta serija temelji na PowerShell 3, ki je dobavljen z operacijskim sistemom Windows 8 in Server 2012. Če uporabljate operacijski sistem Windows 7, prenesite posodobitev PowerShell 3, preden nadaljujete.
Spoznajte konzolo in ISE
Obstajata dva načina interakcije z PowerShell iz škatle, konzole in integriranega skriptnega okolja - znanega tudi kot ISE. ISE se je močno izboljšal v odvratni različici, ki je bila dobavljena z PowerShell 2 in jo je mogoče odpreti s pritiskom na kombinacijo tipkovnice Win + R, da odprete polje za zagon, nato pa vnesete powershell_ise in pritisnete enter.
Kot lahko vidite, je ISE športni pogled, tako da lahko hitro skript, medtem ko še vedno lahko vidite rezultat v spodnji polovici ISE. Spodnjo polovico ISE, kjer so natisnjeni rezultati vašega skripta, lahko uporabite tudi kot poziv REPL - podobno kot ukazni poziv. V3 ISE je končno dodal podporo za intellisense tako v podoknu skriptov kot v interaktivni konzoli.
Lahko pa uporabite PowerShell s konzolo PowerShell, ki jo uporabljam za večino te serije. Konzola PowerShell deluje zelo podobno kot ukazni poziv - preprosto vnesete ukaze in izpljune rezultate. Če želite odpreti konzolo Windows PowerShell, ponovno pritisnite kombinacijo tipkovnice Win + R, da odprete zagonsko polje in vnesete powershell, nato pa pritisnite enter.
REPL pozivi, kot je ta, so super za takojšnje zadovoljstvo: vnesete ukaz in dobite rezultate. Medtem ko konzola ne ponuja intellisense, ponuja nekaj, kar se imenuje dokončanje zavihka, ki deluje enako - preprosto začnite vnašati ukaz in pritiskajte jeziček za prehod med možnimi ujemanji.
Uporaba sistema pomoči
V prejšnjih različicah PowerShell so bile datoteke za pomoč vključene, ko ste namestili Windows. To je bila dobra rešitev za večino del, vendar nas je zapustil velik problem. Ko je ekipa za pomoč PowerShell morala prenehati delati na datotekah pomoči, so razvijalci programa PowerShell še vedno zasedli kodiranje in spreminjanje. To je pomenilo, da so bile datoteke pomoči pri pošiljanju PowerShell napačne, ker niso vsebovale novejših sprememb kode. Da bi rešili to težavo, PowerShell 3 ne vsebuje datotek s pomočjo iz škatle in vključuje sistem pomoči za posodabljanje. To pomeni, da boste preden naredite karkoli, želite prenesti najnovejše datoteke s pomočjo. To lahko storite tako, da odprete konzolo PowerShell in zaženete:
Posodobitev-pomoč
Čestitamo, da ste zagnali svoj prvi ukaz PowerShell! Resnica je, da ima ukaz Update-Help veliko več možnosti kot samo zagon, in da bi jih videli, si želimo ogledati pomoč za ukaz. Če si želite ogledati pomoč za ukaz, preprosto vnesite ime ukaza, ki mu želite pomagati, v parameter Ime ukaza Get-Help, na primer:
Get-Help -Name Update-Help
Verjetno se sprašujete, kako vseeno razložite vse to besedilo. Mislim, zakaj sta v oddelku sintakse veliko dveh informacij in zakaj je na tem mestu toliko oklepajev? Najprej na prvem mestu: razlog za obstoj dveh blokov informacij v razdelku sintakse je, ker predstavljajo različne načine za izvajanje ukaza. To so tehnično imenovani nabori parametrov in jih lahko uporabljate le eno za drugo (ne morete mešati parametrov iz različnih nizov). Na zgornji sliki zaslona lahko vidite, da ima vrhni nabor parametrov parameter SourcePath, medtem ko spodnji ni. Razlog za to je, da uporabite zgornji nabor parametrov (tisti, ki vključuje SourcePath), če ste posodobili datoteke pomoči iz drugega računalnika v omrežju, ki jih je že preneslo, medtem ko vam ne bi bilo treba podati izvorne poti, želel sem zgrabiti najnovejše Microsoftove datoteke.
Če želite odgovoriti na drugo vprašanje, obstaja določena skladnja, ki ji sledijo datoteke s pomočjo in tukaj je:
- Oglati oklepaji okrog imena parametra in njegova vrsta pomeni, da je neobvezen parameter in ukaz bo brez nje dobro deloval.
- Oglati oklepaji okoli imena parametrov pomenijo, da so parametri pozicijski parameter.
- Stvar desno od parametra v kotnih oklepajih vam pove, kateri tip podatkov pričakuje parameter.
Čeprav se morate naučiti brati skladnjo datoteke s pomočjo, če ste vedno prepričani o določenem parametru, samo dodajte -Full do konca vašega ukaza za pomoč in se pomaknite navzdol do odseka parametrov, kjer vam bo povedal nekaj več o vsakem posameznem parametru. parameter.
Get-Help -Name Update-Help-Full
Zadnja stvar, ki jo morate vedeti o sistemu pomoči, je, kako jo lahko uporabite za odkrivanje ukazov, kar je pravzaprav zelo enostavno. Vidite, PowerShell sprejema nadomestne znake skoraj povsod, zato jih lahko z ukazom Get-Help zlahka odkrijete ukaze. Na primer iščem ukaze, ki obravnavajo storitve Windows:
Storitev Get-Help -Name * *
Seveda, vse te informacije morda niso priročne, vendar mi zaupajte, vzemite si čas in se naučite uporabljati sistem pomoči. Prihaja ves čas, celo naprednim scenaristom, ki to počnejo že leta.
Varnost
To ne bi bil ustrezen uvod brez omembe varnosti. Največja skrb za ekipo PowerShell je, da PowerShell postane najnovejša in največja točka napada za scenarije kiddies. Postavili so nekaj varnostnih ukrepov, da bi se prepričali, da se to ne zgodi, zato jih poglejmo.
Najosnovnejša oblika zaščite izhaja iz dejstva, da priponka PS1 (razširitev, ki je uporabljena za označevanje skripta PowerShell) ni registrirana z gostiteljem PowerShell, saj je dejansko registrirana v beležnici. To pomeni, da če dvokliknete datoteko, se bo odprla z notepad, namesto da se izvaja.
Drugič, skriptov iz ukazne lupine ne morete zagnati samo tako, da vnesete ime skripte, morate določiti celotno pot do skripta. Če želite zagnati skript na pogonu C, morate vnesti:
C: runme.ps1
Če ste že v korenu pogona C, lahko uporabite naslednje:
.runme.ps1
Končno, PowerShell ima nekaj, kar se imenuje Izvajanje pravilnikov, ki preprečujejo, da bi zagnali kakšen star skript. V bistvu po privzetku ne morete zagnati nobenih skriptov in morate spremeniti politiko izvajanja, če želite imeti dovoljenje za njihovo izvajanje. Obstajajo 4 pomembna pravila izvajanja:
- Omejeno: To je privzeta konfiguracija v PowerShell. Ta nastavitev pomeni, da se ne more izvajati noben skript, ne glede na njegov podpis. Edina stvar, ki se lahko zažene v PowerShell s to nastavitvijo, je posamezen ukaz.
- AllSigned: Ta nastavitev dovoljuje izvajanje skriptov v programu PowerShell. Skript mora imeti povezan digitalni podpis od zaupanja vrednega izdajatelja. Preden zaženete skripte zaupanja vrednih izdajateljev, se bo pojavil poziv.
- RemoteSigned: Ta nastavitev omogoča zagon skriptov, vendar zahteva, da imajo skript in nastavitvene datoteke, ki so prenesene z interneta, ustrezen digitalni podpis od zaupanja vrednega izdajatelja. Skriptov, ki se izvajajo z lokalnega računalnika, ni treba podpisati. Pred zagonom skripta ni nobenih pozivov.
- Neomejeno: To omogoča zagon nepodpisanih skript, vključno z vsemi skripti in konfiguracijskimi datotekami, ki so bile prenesene z interneta. To bo vključevalo datoteke iz Outlooka in Messengerja. Pri tem obstaja tveganje, da izvajate skripte brez podpisa ali varnosti. Ponovno smo začeli, da nikoli ne uporabljate tega okolja.
Če želite videti, kaj je nastavljeno na trenutno pravilo izvajanja, odprite konzolo PowerShell in vnesite:
Get-ExecutionPolicy
Za ta predmet in večino drugih okoliščin je politika oddaljenega oblikovanja najboljša, zato nadaljujte in spremenite svojo politiko z naslednjim.
Opomba: To bo treba narediti s povišano konzolo PowerShell.
Set-ExecutionPolicy RemoteSigned
To je vse za tokratne ljudi, vidimo se jutri za še nekaj zabave PowerShell.
Opozorilo: Ustrezen izraz za ukaz PowerShell je ukaz »cmdlet« in od zdaj naprej bomo uporabljali to pravilno terminologijo. Pravzaprav se mi je zdelo bolj primerno, da jih imenujem ukaze za ta uvod.
Če imate kakršnakoli vprašanja, me lahko tweetate @taybgibb ali pa pustite komentar.