Johdanto PowerShell-koodiin
PowerShell on Microsoftin kehittämä komentorivi- ja skriptausympäristö, joka perustuu .NET-alustaan. Sen tarkoituksena on automatisoida järjestelmänhallintatehtäviä ja helpottaa toistuvien toimintojen suorittamista. PowerShell-koodi koostuu cmdlet-komennoista, jotka ovat pieniä, yksittäisiä toimintoja suorittavia komentoja. Toisin kuin perinteiset komentorivityökalut, PowerShell käsittelee tulosteita objekteina eikä pelkkinä tekstiriveinä. Tämä mahdollistaa tehokkaan tiedon käsittelyn ja siirtämisen komennosta toiseen putkia käyttäen. PowerShell on nykyään avoimen lähdekoodin työkalu, ja sen uusin versio PowerShell Core toimii Windowsin lisäksi myös Linux- ja macOS-ympäristöissä.
PowerShell-skriptit tallennetaan yleensä .ps1-päätteisiin tiedostoihin. Niitä voidaan suorittaa manuaalisesti komentokehotteessa tai aikataulutetusti. Aloittelijalle tärkeintä on oppia cmdlet-komentojen peruskäyttö, muuttujat ja ehtolauseet. Tässä oppaassa käymme läpi keskeisimpiä käsitteitä ja esittelemme käytännön esimerkkejä, joiden avulla pääset nopeasti alkuun PowerShell-koodin maailmassa.
PowerShell-koodin perusrakenteet
PowerShell-koodi koostuu cmdlet-komennoista, jotka noudattavat Verb-Noun -nimeämiskäytäntöä. Esimerkiksi Get-Process hakee kaikki prosessit, kun taas Set-Location vaihtaa nykyistä hakemistoa. Jokaisella cmdletillä on omat parametrinsa, joilla käyttäytymistä voidaan tarkentaa. Komennot voidaan yhdistää toisiinsa putkimerkillä |. Katoin selkeyden vuoksi alla on luettelo yleisimmistä cmdleteistä, jotka jokaisen aloittelijan tulisi tuntea.

- Get-Help: Näyttää ohjeita cmdlet-komennoista ja niiden parametreista.
- Get-Process: Listaa kaikki käynnissä olevat prosessit, kuten selaimet ja palvelut.
- Get-Service: Hakee Windows-palvelujen tilan (käynnissä, pysäytetty jne.).
- Set-Location: Vaihtaa aktiivista hakemistoa (vastaava kuin cd-komento).
- Set-ExecutionPolicy: Määrittää, millä ehdoilla PowerShell-skriptejä voidaan suorittaa (esim. Restricted, RemoteSigned, AllSigned).
- Get-EventLog: Lukee Windowsin tapahtumalokeja, kuten järjestelmä- tai sovelluslokia.
- Get-ADUser: Hakee Active Directory -käyttäjiä (vaatii Active Directory -moduulin).
- Get-ADComputer: Hakee Active Directory -tietokoneita.
Näiden komentojen lisäksi on olemassa satoja muita cmdletejä, jotka kattavat muun muassa tiedostojärjestelmän, verkon, rekisterin ja Azure-palveluiden hallinnan. Aloittelijan kannattaa harjoitella ensin peruskomentoja ja siirtyä sitten monimutkaisempiin skripteihin.
Muuttujat, silmukat ja ehtolauseet
PowerShell käyttää muuttujia, joiden nimet alkavat $-merkillä. Muuttujiin voidaan tallentaa tekstiä, lukuja, objekteja tai kokonaisia taulukoita. Esimerkiksi $nimi = "Matti" luo muuttujan, johon on tallennettu merkkijono. Taulukot luodaan @()-merkinnällä, kuten $numerot = @(1,2,3,4). Skripteissä tarvitaan usein toistoa varten silmukoita: for, foreach, while ja do-while. For-silmukka sopii tilanteisiin, joissa kierrosten määrä tiedetään etukäteen. Foreach puolestaan käy läpi kaikki taulukon tai putken objektit yksi kerrallaan.
Ehtolauseet kuten if, else ja elseif mahdollistavat eri toimintojen suorittamisen eri tilanteissa. Esimerkiksi if ($ika -ge 18) { "Täysi-ikäinen" } else { "Alaikäinen" }. Switch-käsky on hyvä, jos vertailtavia arvoja on useita. Alla oleva esimerkki havainnollistaa foreach-silmukan ja if-ehdon yhdistämistä:

Esimerkkikoodi: Get-Process | foreach { if ($_.CPU -gt 100) { Write-Host "Prosessi $($_.Name) käyttää paljon suoritinaikaa." } }
Muuttujien ja rakenteiden hallinta on perusta kaikelle PowerShell-koodille. Harjoittelemalla näitä osia pääset tekemään monipuolisia automaatioskriptejä.
Putket ja objektien käsittely
PowerShellin tehokkuus perustuu putkiin, jotka siirtävät yhden komennon tulosteen suoraan seuraavalle komennolle. Koska tuloste on objekti, voit käyttää sen ominaisuuksia suoraan. Esimerkiksi komento Get-Process | Sort-Object CPU -Descending järjestää prosessit suoritinajan mukaan laskevaan järjestykseen. Voit myös suodattaa tuloksia Where-Object-komennolla: Get-Service | Where-Object { $_.Status -eq "Running" } antaa vain käynnissä olevat palvelut. Objektien ominaisuuksia pääset käsiksi pisteen avulla, kuten $prosessi.Name tai $prosessi.CPU.

Lisäksi voit valita vain tietyt ominaisuudet Select-Objectilla tai muuttaa tulosteen muotoa Format-Table- ja Format-List-komennoilla. Putkien avulla voit yhdistää useita komentoja yhdeksi tehokkaaksi skriptiksi ilman väliaikaistiedostoja. Tämä tekee PowerShellistä erinomaisen työkalun erityisesti järjestelmänvalvojille, jotka käsittelevät suuria tietomääriä.
Esimerkkiskripti: Aktiivihakemiston käyttäjien haku
Seuraava skripti havainnollistaa, miten voit hakea Active Directorysta käyttäjät, jotka on luotu viimeisen seitsemän päivän aikana. Skripti käyttää Get-ADUser-cmdletiä ja suodatusta. Huomaa, että Active Directory -moduuli on oltava asennettuna ja riittävät käyttöoikeudet.
Skripti: $Fecha = (Get-Date).AddDays(-7); Get-ADUser -Filter {whenCreated -ge $Fecha} -Properties Name,Enabled,whenCreated | Select-Object Name,Enabled,whenCreated

Ensimmäinen rivi laskee päivämäärän, joka on seitsemän päivää sitten. Get-ADUser -Filter käyttää ehtoa, joka vertaa whenCreated-attribuuttia tähän päivämäärään. -Properties määrittää, mitä käyttäjän ominaisuuksia haetaan. Lopuksi Select-Object valitsee näytettäviksi vain halutut kentät. Tämän skriptin avulla voit helposti seurata uusia käyttäjiä organisaatiossasi.
Taulukko tavallisimmista cmdleteistä ja niiden käyttötarkoituksista
Alla oleva taulukko kokoaa yhteen yleisimpiä PowerShell-cmdletejä, niiden kuvauksia ja esimerkkikäyttöä. Taulukko auttaa hahmottamaan, mihin tarkoitukseen kutakin komentoa voidaan käyttää.
| Cmdlet | Kuvaus | Esimerkki |
|---|---|---|
| Get-Service | Hakee palvelujen tilan | Get-Service -Name "Spooler" |
| Set-ExecutionPolicy | Määrittää skriptien suorituskäytännön | Set-ExecutionPolicy RemoteSigned |
| Get-EventLog | Lukee Windows-tapahtumalokeja | Get-EventLog -LogName System -Newest 10 |
| Get-ADUser | Hakee Active Directory -käyttäjiä | Get-ADUser -Filter * -Properties LastLogon |
| Where-Object | Suodattaa objektit ehdon perusteella | Get-Process | Where-Object {$_.CPU -gt 10} |
Taulukkoa voi täydentää omien tarpeiden mukaan. Muista, että voit aina hakea tarkempia tietoja Get-Help-komennolla.

Suorituskäytännöt ja turvallisuus
PowerShellissa on sisäänrakennettu turvallisuusmekanismi, joka säätelee skriptien suorittamista: suorituskäytäntö (execution policy). Oletuksena useimmissa Windows-versioissa on Restricted, joka estää kaikkien skriptien (.ps1) suorittamisen. Jotta voit ajaa itse kirjoittamiasi skriptejä, sinun on muutettava käytäntöä esimerkiksi RemoteSigned-tasolle, joka sallii paikalliset skriptit ja etäällä allekirjoitetut. Käytännön voi määrittää Set-ExecutionPolicy-komennolla vaatien järjestelmänvalvojan oikeudet.
Turvallisuussyistä on suositeltavaa olla asettamatta käytäntöä Unrestricted-tasolle, ellei se ole välttämätöntä. Lisäksi kannattaa allekirjoittaa omat skriptit digitaalisesti, jotta niiden alkuperä voidaan varmistaa. PowerShell tukee myös etäistuntoja (PowerShell Remoting), joiden avulla voit suorittaa komentoja toisessa koneessa. Etäyhteydet vaativat WinRM:n (Windows Remote Management) käyttöönoton ja oikeat käyttöoikeudet.
Lisätietoja ja resursseja
Microsoftin virallinen dokumentaatio on paras paikka syventää tietämystä PowerShellistä. Sieltä löytyy kaikkien cmdlet-komentojen kuvaukset, esimerkit ja parhaat käytännöt. Toinen erinomainen lähde on PowerShellin ylikatsaussivu Microsoft Learnissa, joka tarjoaa oppimispolkuja ja interaktiivisia moduuleja. Yhteisön ylläpitämä dokumentaatio on myös arvokas – esimerkiksi Wikipedia-artikkeli PowerShellistä antaa kattavan historiakatsauksen ja tekniset perustiedot. Lisäksi GitHubissa sijaitseva PowerShell-projektin repositorio (github.com/PowerShell/PowerShell) tarjoaa lähdekoodin, julkaisut ja keskustelualueen kehittäjille. Kannattaa myös liitty





