Harjoituksessa käytetty laitteisto/ohjelmisto:
- Tietokone (Asus Z170-A, i7-6700K , 16GB DDR4 3200MHz, Evga 1070 sc)
- Oheishärpäkkeet
- Windows 10 Pro 64-Bit ( versio 1607)
- PowerShell versio 5.1.14393.1358
Hello World in PowerShell
Write-Host cmdlet antaa minun kirjoittaa viestejä PowerShell komentokehotteeseen. Cmdlet tarkoittaa kevyttä PowerShell-ympäristössä käytettävää komentoa.
Syntaksista sen verran, että yksittäisten heittomerkkien kanssa, teksti kirjoitetaan juuri määrittelemälläni tavalla.
Write-Host 'Hello World!'
Lainausmerkkien kanssa PowerShell voi tunnistaa virkkeestä muuttujia yms.
Write-Host "Hello World!"
Hello World esimerkin kanssa ei ole havaittavissa eroa, mutta tuo kannattaa pitää mielessä. Tosin, jos haluaa esimerkiksi rivinvaihdon ennen uutta virkettä, niin voi käyttää `n. Tällöin täytyy laittaa lainausmerkit, sillä muuten PowerShell siteeraa minua kirjaimellisesti.
Write-Host "Hello World! `nMy first script!`nYAHOO!"
Huomaa ero kahden välillä tulostuksessa:
Tässä vaiheessa totesin samalla, että fonttikoko on vähän turhan pieni. PowerShellin fonttikoon voi muuttaa avaamalla PowerShellin järjestelmänvalvojana ja navigoimalla: Ominaisuudet > Fontti PowerShell ikkunan yläpalkista hiiren oikealla klikillä.
Hello World! näkyy nyt vähän suurempana.
PowerShell skriptien ajaminen
PowerShell skriptien tiedostopääte on .ps1. Skriptin voi kirjoittaa vaikka muistiossa ja ajaa sitten PowerShellissä.
Kokeilenpa Hello Worldia nyt skriptinä, eli PowerShell kirjoittaa “Hello World!” koneeni työpöydälle hello.txt tiedostoon.
Tiedostosijainti kannattaa määritellä, sillä muuten tiedosto luodaan Windowsin kansioon System32.
# Muuttuja $text = 'Hello World!' # Luo tiedosto ja kirjoita siihen $text | Set-Content 'C:\Users\Markus\Desktop\hello.txt'
Skriptit ajetaan kutsumalla niitä PowerShellissä tiedostonimen ja -sijainnin mukaan:
C:\Users\Markus\Desktop\PowerShell\testi.ps1
Jos yritän ajaa tekemäni testi.ps1 skriptin saan seuraavan errorin:
C:\Users\Markus\Desktop\PowerShell\testi.ps1 : File C:\Users\Markus\Desktop\PowerShell\testi.ps1 cannot be loaded because running scr ipts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170. At line:1 char:1 + C:\Users\Markus\Desktop\PowerShell\testi.ps1 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
Skriptien ajaminen on oletuksena kielletty, joten minun tulee asettaa ExecutionPolicy siten, että saan skriptin ajettua.
PowerShell ExecutionPolicy
ExecutionPolicyja on viittä eri tyyppiä:
- Restricted – Skriptien ajo on estetty täysin. Vain yksittäisiä komentoja voi ajaa.
- AllSigned – Vain luotettavan levittäjän skriptejä voidaan ajaa.
- RemoteSigned – Sallii paikallisten skriptien ajon ja luotettavien ladattujen skriptien ajon.
- Unrestricted – Kaikki skriptit voidaan ajaa ilman esteitä. Antaa varoituksen ennen ladattujen skriptien ajamista.
- Bypass – Ei rajoituksia, eikä varoituksia.
ExecutionPolicyn tilan näkee seuraavalla komennolla:
Get-ExecutionPolicy -List
Niitä ei siis ole asetettu.
Itseäni kiinnostaa vain omien paikallisten skriptien ajaminen, joten asetan ExecutionPolicyn RemoteSigned.
Set-ExecutionPolicy RemoteSigned
Tämän jälkeen minua pyydettiin varmistamaan tekemäni muutos.
Painoin Y, eli kyllä. Siitä seurasi tämmöinen virheilmoitus:
Set-ExecutionPolicy : Rekisteriavainta HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell ei voi käyttä ä. To change the execution policy for the default (LocalMachine) scope, start Windows PowerShell with the "Run as administrator" opti on. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser". At line:1 char:1 + Set-ExecutionPolicy RemoteSigned + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand
En ollut suorittanut PowerShelliä järjestelmänvalvojana, joten minulla ei ollut käyttöoikeuksia muutoksen tekemiseksi.
Kokeillaanpa uudelleen adminin oikeuksin:
Sama komento:
Set-ExecutionPolicy RemoteSigned
Virheilmoituksia ei tullut tällä kertaa, joten katsotaanpa Execution Policyjen tila uudelleen:
LocalMachine on nyt RemoteSigned, eli paikallisten skriptien ajaminen pitäisi nyt onnistua.
C:\Users\Markus\Desktop\PowerShell\testi.ps1
Ja tiedosto löytyi sisältöineen työpöydältä:
Ei mitään ihmeellisempää tältä erää, mutta tästä on hyvä jatkaa. On jo pari ideaa, mitä voisi PowerShellillä yrittää toteuttaa.
Lähteet:
Social Technet Microsoft 2012. Open, Write and Close the File using Powershell. URL: https://social.technet.microsoft.com/Forums/scriptcenter/en-US/0a6860f5-9b02-4e79-97fe-05829f2c5ab3/open-write-and-close-the-file-using-powershell?forum=ITCG
ss64. Run a PowerShell script. https://ss64.com/ps/syntax-run.html
Technet Microsoft. Getting Started with PowerShell Scripting for VMM. URL: https://technet.microsoft.com/en-us/library/bb963733.aspx
Using the Write-Host Cmdlet. URL: https://technet.microsoft.com/en-us/library/ee177031.aspx
Technet Microsoft. Using the Set-ExecturionPolicy Cmdlet. URL: https://technet.microsoft.com/en-us/library/ee176961.aspx
Tenforums 2016. Change PowerShell Script Execution Policy in Windows 10. How to Set PowerShell Script Execution Policy in Windows 10. URL: https://www.tenforums.com/tutorials/54585-change-powershell-script-execution-policy-windows-10-a.html
Pingback: PowerShell – Windows-järjestelmän virhelokit automaattisesti .csv-tiedostoon – Markus Pyhäranta