Idi profesionalno: Korisnički vodič za PowerShell

Ako ste se hrvali s Windowsom 10, nesumnjivo ste čuli za PowerShell. Ako ste nedavno pokušali napraviti nešto otmjeno s Win7 / 8.1, vjerojatno se pojavio i PowerShell. Nakon godina oslanjanja na Windows naredbeni redak i spojene batch datoteke, vrijeme je da se usredotočite na nešto moćnije, prilagodljivije - bolje.

PowerShell je ogroman dodatak Windowsovom alatu i može izazvati malo straha s obzirom na tu ogromnost. Je li to skriptni jezik, naredbena ljuska ili vosak za pod? Morate li povezati cmdlet s instanciranom .Net klasom za pokretanje s davateljima usluga? I zašto svi dokumenti o podršci govore o administratorima - moram li biti profesionalni Windows administrator da bih ga koristio?

Opustiti. PowerShell je moćan, ali ne treba zastrašivati.

Sljedeći je vodič namijenjen onima koji su izvršili Windows naredbu ili dvije ili im je dodijelila batch datoteku. Smatrajte to korak po korak transformacijom iz PowerShella znatiželjnog u PowerShell sposobnog.

Korak 1: Podignite ga

Prvo što će vam trebati je sam PowerShell. Ako koristite Windows 10, već imate instaliranu PowerShell 5 - najnoviju verziju. (Win10 Anniversary Update ima 5.1, ali nećete znati razliku s jesenskim ažuriranjem 5.0.) Windows 8 i 8.1 isporučuju se s PowerShell 4, što je dovoljno dobro da namočite noge. Instalacija PowerShell-a na Windows 7 nije teška, ali je potrebna dodatna pažnja - i .Net Framework morate instalirati odvojeno. JuanPablo Jofre detaljno opisuje kako na MSDN instalirati WMF 5.0 (Windows Management Framework), koji uključuje PowerShell, pored alata koje vjerojatno nećete koristiti prilikom pokretanja.

PowerShell nudi dva sučelja. Napredni korisnici odabrat će potpuno razvijeni GUI, poznat kao integrirano okruženje skriptiranja (ISE). Početnicima, pak, najbolje služi PowerShell Console, jednostavno tekstualno sučelje koje podsjeća na Windows naredbeni redak ili čak DOS 3.2.

Da biste pokrenuli PowerShell kao administrator u sustavu Windows 10, kliknite Start i pomaknite se prema dolje na popisu aplikacija do Windows PowerShell. Kliknite tu liniju, desnom tipkom miša kliknite Windows PowerShell i odaberite Pokreni kao administrator. U sustavu Windows 8.1 potražite Windows PowerShell u mapi Windows System. U Win7 je u mapi Pribor. PowerShell možete pokrenuti kao "normalni" korisnik slijedeći isti slijed, ali lijevim klikom.

U bilo kojoj verziji sustava Windows pomoću pretraživanja sustava Windows možete potražiti PowerShell. U sustavima Windows 8.1 i Windows 10 možete ga staviti na svoj Ctrl-X "Izbornik napajanja" (desnom tipkom miša pritisnite prazno mjesto na programskoj traci i odaberite Svojstva; na kartici Navigacija potvrdite okvir Zamijeni naredbeni redak). Kad ga otvorite, bilo bi dobro prikvačiti PowerShell na programsku traku. Da, toliko će ti se svidjeti.

Korak 2: Upišite staromodne Windows naredbe

Zapanjili biste se koliko sintaksa naredbenog retka sustava Windows funkcionira kako se očekuje u PowerShell-u.

Na primjer, cdmijenja direktorije (zvane mape), a i dirdalje navodi sve datoteke i mape uključene u trenutnu mapu.

Ovisno o tome kako pokrećete PowerShell konzolu, možete započeti u c:\Windows\system32ili u c:\Users\. U primjeru snimke zaslona koristim cd ..(imajte na umu razmak) za pomicanje prema gore za jednu razinu, a zatim pokrenim dirkako bih naveo sve datoteke i podmape u C:\direktoriju.

Korak 3: Instalirajte datoteke pomoći

Naredbe poput cdi dirnisu izvorne PowerShell naredbe. Oni su aliasi - zamjene za prave PowerShell naredbe. Aliasi mogu biti korisni onima koji imaju pamćenje prstiju koje je teško prevladati. Ali oni uopće ne počinju dodirivati ​​najvažnije dijelove PowerShella.

Da biste počeli osjećati sam PowerShell, upišite helpnaredbu koju znate. Na primjer, na snimci zaslona tipkam help dir.

Pomoć za PowerShell govori mi da dirje to zamjensko ime za naredbu PowerShell Get-ChildItem. Svakako, ako upišete get-childitemna PS C:\>upit, vidjet ćete točno ono što ste vidjeli dirnaredbom.

Kao što je navedeno na dnu snimke zaslona, ​​datoteke pomoći za PowerShell ne instaliraju se automatski. Da ih dohvatiti (što ne žele da ih se), prijavite se na PowerShell u administratorskom načinu, a zatim upišite update-help. Instalacija datoteka pomoći potrajat će nekoliko minuta, a možda vam nedostaje nekoliko modula - Pomoć za NetWNV i SecureBoot nije uspjela instalirati na mom testnom stroju. Ali kad završite, puni sustav pomoći bit će vam na raspolaganju.

Od tog trenutka upišite get-helpnaredbu (slijedi naredba ("cmdlet" u programu PowerShell, izgovara se "command-let") koja se tiče vas i pogledajte svu pomoć za tu stavku. Na primjer, get-help get-childitemdaje sažetak get-childitemopcija. Također će vas zatražiti da upišete varijacije teme. Dakle, slijedi:

get-help get-childitem -examples

daje sedam detaljnih primjera kako koristiti get-childitem. Naredba PowerShell

get-help get-childitem -detailed

uključuje tih sedam primjera, kao i detaljno objašnjenje svih parametara dostupnih za get-childitemcmdlet.

Korak 4: Pronađite pomoć za parametre

Na help dirsnimci zaslona možda ste primijetili da postoje dva popisa SYNTAXza for get-childitem. Činjenica da postoje dvije odvojene sintakse za cmdlet znači da postoje dva načina pokretanja cmdleta. Kako održavate odvojene sintakse - i što znače parametri? Odgovor je lak ako znate trik.

Da biste dobili sve detalje o parametrima za get-childitemcmdlet ili bilo koji drugi cmdlet, upotrijebite -fullparametar, ovako:

get-help get-childitem -full

To daje redni popis onoga što možete učiniti s cmdletom i što se može (ili ne mora!) Dogoditi. Pogledajte snimak zaslona.

Pregledavajući detalje parametara, razumno je lako vidjeti da get-childitemse mogu koristiti za dohvaćanje "podređenih" stavki (kao što su imena podmapa ili imena datoteka) na mjestu koje odredite, sa ili bez određenih podudaranja znakova. Na primjer:

get-childItem “*.txt” -recurse

dohvaća popis svih *.txtdatoteka “ ” u trenutnoj mapi i svim podmapama (zbog -recurseparametra). Budući da sljedeće:

get-childitem “HKLM:\Software”

vraća popis svih ključeva registra na visokoj razini u sustavu Windows HKEY_LOCAL_MACHINE\Software.

Ako ste ikad pokušali ući u registar pomoću Windows naredbenog retka ili batch datoteke, siguran sam da vidite koliko moćan mora biti takav pristup.

Korak 5: Zakucajte imena

Postoji razlog zašto su cmdlets smo vidjeli do sada izgledaju isto: get-childitem, update-helpi get-helpsvi slijede isti glagol-imenicu konvenciju. Milostivo, svi cmdlet-ovi PowerShella koriste ovu konvenciju, s glagolom koji prethodi imenici (jednina). Oni koji ste se tjednima mučili oko nedosljedno nazvanih VB i VBA naredbi, možete odahnuti.

Da biste vidjeli kamo idemo, pogledajte neke od najčešćih cmdlet komandi (zahvaljujući blogu Eda Wilsona Hey, Scripting Guy!). Započnite s komandnim komandama koje ulaze u vaš sustav i izvucite korisne informacije, poput sljedećeg:

  • set-location: Postavlja trenutno radno mjesto na određeno mjesto
  • get-content: Dohvaća sadržaj datoteke
  • get-item: Dohvaća datoteke i mape
  • copy-item: Kopira stavku s jednog mjesta na drugo
  • remove-item: Briše datoteke i mape
  • get-process: Dobiva procese koji se izvode na lokalnom ili udaljenom računalu
  • get-service: Dobiva usluge pokrenute na lokalnom ili udaljenom računalu
  • invoke-webrequest: Dohvaća sadržaj s internetske stranice na Internetu

Da biste vidjeli kako određeni cmdlet radi, upotrijebite get-help, kao u

get-help copy-item -full

Na temelju opisa pomoći možete lako otkriti što cmdlet želi. Na primjer, ako želite kopirati sve svoje datoteke i mape od Documentsdo c:\temp, koristili biste:

copy-item c:\users\[username] \documents\* c:\temp

Dok upisujete tu naredbu, vidjet ćete nekoliko lijepih dodira ugrađenih u okruženje PowerShell. Na primjer, ako copy-iutipkate i pritisnete tipku Tab, PowerShell popunjava Copy-Itemi razmak. Ako pogrešno upišete cmdlet i PowerShell to ne može shvatiti, dobit ćete vrlo temeljit opis onoga što je pošlo po zlu.

Isprobajte ovaj cmdlet. (Možda će vas pokušati navesti da instalirate program za čitanje okvira "about". Ako jeste, zanemarite ga.)

invoke-webrequest askwoody.com

Dobit ćete sažeti popis izjava o sadržaju web stranice, zaglavlja, slika, veza i još mnogo toga. Vidite kako to funkcionira? Primijetite na get-helppopisu invoke-webrequestda invoke-webrequestcmdlet "vraća zbirke obrazaca, veza, slika i drugih značajnih HTML elemenata" - upravo ono što biste trebali vidjeti na zaslonu.

Neke cmdlet komande pomažu vam u kontroliranju ili pregledavanju same PowerShell:

  • get-command: Navodi sve dostupne komandne komande (poduži je popis!)
  • get-verb: Navodi sve dostupne glagole (lijeve polovice cmdlet komandi)
  • clear-host: Briše prikaz u glavnom programu

Razni parametri (sjetite se get-help) omogućuju vam smanjivanje naredbi i sužavanje opcija koje bi vam mogle biti korisne. Na primjer, da biste vidjeli popis svih cmdlet komandi koje rade sa Windows uslugama, pokušajte ovo:

get-command *-service

Navodi sve glagole koji su dostupni sa servicekao imenicu. Evo rezultata:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Možete kombinirati ove cmdlet komande s drugim cmdlet komandama da biste se iskopali u gotovo bilo koji dio PowerShell-a. Tu cijevi dolaze na sliku.

Korak 6: Unesite cijevi

Ako ste ikada koristili Windows naredbenu liniju ili progurali kroz batch datoteku, znate o preusmjeravanju i cijevima. Jednostavno rečeno, i preusmjeravanje (  >znak) i cijevi ( |lik) uzimaju izlaz iz akcije i lijepe je negdje drugdje. Možete, na primjer, preusmjeriti izlaz dirnaredbe u tekstualnu datoteku ili "ubaciti" rezultat pingnaredbe u datoteku find, kako biste filtrirali zanimljive rezultate, na primjer:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

U drugoj naredbi iznad findnaredba traži niz packetsu cjevovodnom izlazu askwoody.com pingi lijepi sve retke koji se podudaraju u datoteci koja se zove temp2.txt.

Možda iznenađujuće, prva od tih naredbi dobro funkcionira u PowerShell-u. Da biste pokrenuli drugu naredbu, želite nešto poput ovoga:

ping askwoody.com | select-string packets | out-file temp2.txt

Korištenje preusmjeravanja i cijevi uvelike proširuje mogućnosti Windows naredbenog retka: Umjesto da se beskrajno pomičete po zaslonu tražeći tekstualni niz, na primjer, možete sastaviti cijevnu Windows naredbu koja za vas vrši provjeru.

PowerShell ima mogućnost cjevovoda, ali nije ograničen na tekst. Umjesto toga, PowerShell vam omogućuje prosljeđivanje cijelog objekta s jedne cmdlet komande na sljedeću, pri čemu je "objekt" kombinacija podataka (koja se nazivaju svojstva) i radnji (metoda) koje se mogu koristiti na podacima.

Najteži dio, međutim, leži u poravnavanju predmeta. Vrsta predmeta koju isporučuje jedan cmdlet mora se podudarati s vrstama objekata koje prihvaća cmdlet. Tekst je vrlo jednostavna vrsta predmeta, pa ako radite s tekstom, redoslijed predmeta je jednostavno. Ostali predmeti nisu tako osnovni.

Kako to shvatiti? Dobrodošli u get-membercmdlet. Ako želite znati koju vrstu predmeta cmdlet proizvodi, provucite ga get-member. Na primjer, ako pokušavate otkriti procese koji se izvode na vašem računalu i suzili ste mogućnosti na get-processcmdlet, evo kako možete saznati što get-processcmdlet proizvodi:

get-process | get-member

Pokretanjem te naredbe stvara se dugački popis svojstava i metoda za get-process, ali na samom početku popisa možete vidjeti vrstu objekta koji get-process stvara:

TypeName: System.Diagnostics.Process

Ispod zaslona se također kaže da get-processima svojstva zove Handles, Name, NPM, PM, SI, VM, i WS.

Ako želite manipulirati izlazom get-processda biste mogli raditi s njim (za razliku od toga da prikazuje dugački popis aktivnih procesa na monitoru), morate pronaći drugu cmdlet datoteku koja će raditi System.Diagnostics.Processkao ulaz. Da biste pronašli spremni cmdlet, jednostavno koristite ... pričekajte ... PowerShell:

get-command -Parametertype System.Diagnostics.Process

To daje popis svih cmdlet komandi koje mogu obraditi System.Diagnostics.Process.

Neki cmdleti poznati su po tome što uzimaju gotovo bilo koju vrstu unosa. Glavni među njima: where-object. Možda zbunjujuće, where-objectjedan po jedan pregledava svaku stavku poslanu niz cijev i primjenjuje sve kriterije odabira koje zatražite. Postoji posebna oznaka koja se zove $_. koji vam omogućuje da prođete svaku stavku u cijevi, jednu po jednu.

Recimo da ste željeli izraditi popis svih procesa koji se izvode na vašem stroju i koji se nazivaju “ svchost” - u PowerShell govoru želite podudaranje na Namesvojstvu  svchost. Isprobajte ovu naredbu PowerShell:

get-process | where-object {$_.Name -eq “svchost”}

U where-objectcmdlet gleda na svaku System.Diagnostics.Processstavku, uspoređuje .Namete stavke u „ svchost”; ako se predmet podudara, ispljune kraj cijevi i otkuca na vašem monitoru. Pogledajte snimak zaslona.