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
- Pääset eroon ”skriptien suoritus on estetty”-viestistä
- Määritä ”skriptit”:. PowerShell-aseman sijainti
- Komentokehotteen konfigurointi
- Erilaiset tehtävät
- Kirjoittaminen ruudulle
- Kehota käyttäjää antamaan tietoja
- Manipuloi päivämääriä
- Lähetä sähköpostia
- Sleep
- Listaa hakemisto (rekursiivisesti)
- Testaa, onko tiedosto olemassa
- Lue tiedoston rivit joukkoon
- Kirjoita tiedostoon
- Nimeä tiedosto
- Poista tiedosto
- Työskentely säännöllisillä lausekkeilla
- Jaa ja yhdistä merkkijonoja
- Nappaa web-sivu
- Rekisterin lukeminen ja kirjoittaminen
- Ymmärrä lainausmerkit
- Aikaistaa komennon
- Teksti puheeksi
- Windows-leikepöydän käyttäminen
- Lataa .NET-kokoonpano
- Suorita ajoaikana luotua koodia
- Suorita ohjelma, jonka polussa on välilyönti
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-Command
aikaa 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