PowerShell-keittokirja

Tämä on luettelo asioista, jotka kollegani ja minä olemme havainneet hyödyllisiksi työssämme. Sen ei ole tarkoitus olla tietosanakirja, vaan pikemminkin paikka, johon voi kirjata asioita, joista aloittelijalle on hyötyä, erityisesti asioita, joiden selvittäminen saattaa kestää kauan.

Tämä sivu aloitettiin ennen kuin O’Reilly julkaisi Lee Holmesin kirjoittaman Windows PowerShell Cookbookin. Suosittelen O’Reillyn kirjaa, mutta tämä sivu ei liity siihen.

Katso myös PowerShell gotchas.

Yhteenveto

  • Aloittaminen/asennus
    • Asenna PowerShell
    • Asenna Community Extensions -kirjasto
    • Vapauta viesti ”skriptien suoritus on estetty”
    • Asenna ”skriptit”:” PowerShell-aseman sijainti
    • Komentokehotteen määrittäminen
  • Erilaiset tehtävät
    • Kirjoita näytölle
    • Kehota käyttäjää syöttämään
    • Päivämäärien muokkaaminen
    • Sähköpostin lähettäminen
    • Nukkuminen
    • Luettele hakemisto (rekursiivisesti)
    • Testaa, onko tiedosto olemassa
    • Lue tiedostojen rivit tiedostoon tiedostoon
    • Kirjoita tiedostoon
    • Nimeä tiedosto
    • Poista tiedosto
    • Työskentele säännöllisillä lausekkeilla
    • Jaa ja yhdistä merkkijonoja
    • Hakee web-verkkoa sivu
    • Rekisterin lukeminen ja kirjoittaminen
    • Lainausmerkkien ymmärtäminen
    • Komennon ajoittaminen
    • Teksti puheeksi
    • Käyttää Windowsin leikepöytää
    • Lataa .NET-kokoonpano
    • Suorittaa suoritusaikana luotua koodia
    • Suorittaa ohjelmaa, jonka polussa on välilyönti

Aloittaminen/asennus

Asenna PowerShell

PowerShellin saa osoitteesta:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

top

Asenna Community Extensions -kirjasto

PowerShell Community Extensions (PSCX) -kirjasto on saatavana täältä:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX

Tämä on hyödyllinen kokoelma cmdletteja ja toimintoja. Se asentaa WindowsExploreriin ”PowerShell Here” -kontekstivalikon, joka avaa PowerShell-komentoikkunan kansioon, jota hiiren oikealla napsautetaan. Lisäksi PSCX tarjoaa esimerkkitiedoston Profile.ps1.

Kun PSCX on asennettu, kirjoita man about_pscx nähdäksesi yleiskatsauksen PSCX:n mukana tulevista cmdleteistä, tarjoajista jne.

top

Pääset eroon ”skriptien suoritus on estetty”-viestistä

Ensimmäinen ongelma, johon todennäköisesti törmäät PowerShell-skriptejä suorittaessasi, on jotakuinkin tällainen:

PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<

Tämä johtuu PowerShellin oletusarvoisesta tietoturva-asetuksesta, joka estää haitallisten skriptien suorittamisen.

Voit muuttaa tätä käyttäytymistä seuraavasti:

PSH> set-executionPolicy RemoteSigned

Jatkossa vain etälähteistä tulevat skriptit vaativat digitaalista allekirjoitusta.

top

Määritä ”skriptit”:. PowerShell-aseman sijainti

Kun olet kirjoittanut useita PowerShell-skriptejä, saattaa olla hyödyllistä kerätä ne yhteen paikkaan ja luoda PSDrive nimellä scripts:, jotta löydät ne nopeasti. Voit lisätä PSCX-profiiliisi seuraavan ohjeen tällaisen PSDriven luomiseksi.

New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts

top

Komentokehotteen konfigurointi

Komentokehotteen konfigurointiin riittää, että luot toiminnon nimeltä prompt ja laitat sen profiiliisi. Esimerkiksi seuraava aiheuttaa työhakemiston näyttämisen.

function prompt { "$pwd> " }

Huomaa, että voit laittaa mitä tahansa haluamaasi koodia prompt-funktion sisälle, ja tämä koodi suoritetaan joka kerta, kun painat return-näppäintä.

top

Erilaiset tehtävät

Kirjoittaminen ruudulle

Käyttäkää tulosteen kirjoittamiseen Write-Host. Voit valinnaisesti määrittää -foregroundcolor tulosteen värittämiseksi. Esimerkiksi virheet ja varoitukset voidaan korostaa punaisella.

Esimerkki:

Write-Host "Hello world" -foregroundcolor red

top

Kehota käyttäjää antamaan tietoja

Käytä Read-Host.

Esimerkki:

$a = Read-Host "Enter your name"Write-Host "Hello" $a

top

Manipuloi päivämääriä

Cmdlet get-date palauttaa DateTime-objektin. Ilman argumenttia se palauttaa nykyisen kellonajan ja päivämäärän. Merkkijonoargumentilla, jota ei tarvitse lainata, se jäsentää merkkijonon päivämääräksi.

Esimerkki: Etsi päivien ja tuntien määrä Yhdysvaltain kaksisataavuotisjuhlasta.

(get-date) - (get-date 7/4/1976)

Voit myös valaa merkkijonoja DateTime-olioksi käyttämällä cast .

top

Lähetä sähköpostia

Käytä PowerShell Community Extensions -ohjelmasta löytyvää Send-SmtpMail-komentoa.

Esimerkki:

Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"

top

Sleep

Käytä komentoa Start-Sleep. Kestää oletusarvoisesti sekunteja, mutta siinä on -milliseconds-vaihtoehto.

Esimerkki:

Write-Host "hello"; Start-Sleep 5; Write-Host "world"

top

Listaa hakemisto (rekursiivisesti)

Voit käyttää komentoa dir, joka on oikeastaan alias Get-ChildItem. Jos haluat listata hakemiston rekursiivisesti, lisää vain -recurse-optio.

Esimerkki:

dir f:\bin -recurse

top

Testaa, onko tiedosto olemassa

Käytä test-path.

top

Lue tiedoston rivit joukkoon

Käytä get-content.

Esimerkki:

$a = (get-content foo.txt)

top

Kirjoita tiedostoon

Käytä Out-File. Ellet halua Unicode-tulostusta, määritä -encoding ASCII

Esimerkki:

$foo | out-file -encoding ASCII foo.txt

top

Nimeä tiedosto

Käytä Rename-Item tai sen alias ren.

top

Poista tiedosto

Käytä Delete-Item tai sen alias del.

top

Työskentely säännöllisillä lausekkeilla

Katso Säännölliset lausekkeet PowerShellissä ja Perlissä.

top

Jaa ja yhdistä merkkijonoja

Merkkijonoilla on split-metodi. Argumenttina split() on merkkijono, joka sisältää merkkejä, joihin halutaan jakaa. Funktio ::split on yleisempi. Sen ensimmäinen argumentti on merkkijono, joka halkaistaan, ja toinen argumentti on säännöllinen lauseke, jonka perusteella halkaistaan.

Esimerkki:

$a.split("`t ")

halkaisee merkkijonon $a merkkijonojen joukoksi ja jakaa aina, kun siinä on tabulaattori tai välilyönti.

Esimerkki:

$a = "123,456,apple"; ::split($a, ",(?!\d)")

halkaisee merkkijonon $a pilkkujen kohdalla, joiden jälkeen ei ole numeroita. Jakaminen palauttaisi siis ”123,456” ja ”omena”.

Jos jakamasi merkkijono on Windows-polku, saatat haluta käyttää siihen erikoistunutta Split-Path-komentoa.

Yhdistääksesi joukon yhdeksi merkkijonoksi, käytä ::join-menetelmää. Ensimmäinen argumentti on erottelumerkki ja toinen on joukko.

Esimerkki:

$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)

Nyt $b sisältää ”1*2*3”.

top

Nappaa web-sivu

Käytä joko Get-Url PSCX:stä tai net.webclient-objekti .NET:stä. Edellinen on ytimekkäämpi, mutta jälkimmäinen mahdollistaa enemmän vaihtoehtoja.

Esimerkki:

$w = Get-Url "https://www.w3.org"

$w = (new-object net.webclient).DownloadString("https://www.w3.org")

Koodi (new-object net.webclient) luo .NET:n WebClient-olion, jolla on monia hyödyllisiä metodeja. Voit esimerkiksi kutsua DownladFile tallentaaksesi suoraan levylle merkkijonon sijaan. On myös UploadData ja UploadFile metodeja.

top

Rekisterin lukeminen ja kirjoittaminen

Voit navigoida rekisterissä kuten tiedostojärjestelmässä, vaikka joitain yksityiskohtia on tiedettävä.

Jokainen rekisterin pesä on kuin asema. Voit siis esimerkiksi tutkia HKEY_CURRENT_USER, voit cd HKCU: ja sen jälkeen käyttää cd edetäksesi puussa alaspäin. Käytä Get-ItemProperty lukemiseen ja Set-ItemProperty kirjoittamiseen. Voit myös käyttää Remove-ItemProperty poistamiseen.

Esimerkki:

Alla olevat komennot listaavat sen rekisterisolmun sisällön, joka määrittää cmd.exe-kuoren. Asettamalla CompletionChar arvoksi 9 otamme tabulaattoritäydennyksen käyttöön.

cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9

Tässä TechNet-artikkelissa kerrotaan tarkemmin.

top

Ymmärrä lainausmerkit

PowerShellissä on neljä erilaista lainausmerkkiä: yksinkertaiset ja kaksinkertaiset tavalliset lainausmerkit sekä yksinkertaiset ja kaksinkertaiset here-merkkijonot. Kaksinkertaisten lainausmerkkien ja kaksinkertaisten here-merkkijonojen sisällä muuttujien nimet korvataan niiden arvoilla ja PowerShellin pakosekvenssit tulkitaan. Yksittäisten lainausmerkkien ja yksittäisten here-merkkijonojen sisällä muuttujien nimiä ei laajenneta eikä pakosarjoja tulkita. Esimerkiksi koodinpätkä

 $a = "bar" 'foo`t$a', "foo`t$a"

tuottaa tuloksen

 foo`t$a foo bar

, koska kaksoissitaattien sisällä `t laajennetaan tabulaattoriksi ja $a laajennetaan ”bar”-merkiksi.

PowerShellin here-merkkijonot ovat kuin Perlin here-dokumentit. Here-merkkijonon sisällä kaksois- ja yksinkertaiset lainausmerkit eivät ole erityisiä, vaan ne lainataan kirjaimellisesti. Myös rivinvaihdot säilyvät.

Here-merkkijono alkaa joko @" tai @' ja päättyy samoihin symboleihin päinvastaisessa järjestyksessä. Avaavan merkin jälkeen ja ennen päättävää merkkiä on oltava uusi rivi.

Esimerkki

 $a = "bar" $b = @" foo "baz" 'qux' $a "@ $b

tuottaa

 foo "baz" 'qux' bar

ja

 $a = "bar" $b = @' foo "baz" 'qux' $a '@ $b

tuottaa

 foo "baz" 'qux' $a

Huomaa, että here-merkkijonon avaavan lainausmerkin perässä ei saa olla valkoista tilaa. Muuten saat viestin ”Unrecognized token in source text.”

Vaikka ne näyttävät samankaltaisilta, PowerShellin here-merkkijonot ja C#:n sanatarkat merkkijonot ovat melko erilaisia. Seuraavassa taulukossa on yhteenveto eroista.

C# sanatarkat merkkijonot PowerShell here-strings
Voi sisältää rivinvaihtoja Täytyy sisältää rivinvaihtoja
Vain kaksoisten lainausmerkkien muunnos Yksittäisten ja kaksoisten lainausmerkkien muunnos
Alkaa @” Alkaa @” (tai @’) ja rivinvaihto
Päättyy ” Päättyy rivinvaihtoon, jota seuraa ”@ (tai ’@)
Ei voi sisältää un-escaped double quotes May contain quotes
Turns off C# escape sequences ’@ turns off PowerShell escape sequences but ”@ does not

top

Aikaistaa komennon

Käytä Measure-Command käyttääksesi Measure-Commandaikaa siihen, kauanko aikaa kestää tehtävän suorittaminen.

top

Teksti puheeksi

Käytä Out-Speech PSCX:stä.

top

Windows-leikepöydän käyttäminen

Käytä PSCX:n komentokomentoja Get-Clipboard ja Out-Clipboard lukeaksesi leikepöydästä ja kirjoittaaksesi siihen.

top

Lataa .NET-kokoonpano

Voit kutsua LoadWithPartialName. Jos haluat esimerkiksi ladata Team Foundation Server API:n kokoonpanon, suoritat

::LoadWithPartialName("Microsoft.TeamFoundation.Client")

Vrt. myös Resolve-Assembly PSCX:stä.

top

Suorita ajoaikana luotua koodia

Komento Invoke-Expression vastaa eval:tä Perlissä tai JavaScriptissä. Invoke-Expression $str suorittaa merkkijonon $str sisältämän koodin.

top

Suorita ohjelma, jonka polussa on välilyönti

Laita lainausmerkit polun ympärille ja liitä sen eteen ykkösmerkki. Esimerkiksi,

& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"

käynnistää suoritettavan ohjelman WinEdt.exe, jonka täydellisessä polussa on kaksi välilyöntiä.

Huomaa, ettet voi jättää amperandia pois. Toisin kuin cmd.exe, PowerShell ei oleta, että kaikki merkkijonot ovat komentoja. Ilman &-merkkiä lainausmerkkipolku on vain merkkijono.

top

Vastaa

Sähköpostiosoitettasi ei julkaista.