Digikuun blogissa tänään:

PowerShell omilla mausteilla

Kirjoittaja:

Nyt kun joulukuusen koristeet alkaa olla tungettu takaisin laatikkoon ja kuusesta on muistona vain neulaset jalkapohjissa, voi miettiä muita keinoja piristää päiväänsä ennen kevättä. 

Yksi tällainen keino on tuunata PowerShelliä hieman värikkäämmäksi, ja myös informatiivisemmaksi – ihan oman maun mukaan. Samassa rytäkässä voi luoda myös komennoille omia aliaksia, muuttujia tai funktioita jos on tarvetta. Profiilit tarjoavat siis hyvin paljon mahdollisuuksia muokata PowerShellin toimintaa omiin tarpeisiin. Tässä vähän perusteita, joilla pääset alkuun oman PowerShellin tuunauksessa. 

PowerShell profiilit 

Kun PowerShell käynnistetään, se lataa profiilin asetuksineen. Profiili on käytännössä vain skripti, joka suoritetaan PowerShellin käynnistyksen yhteydessä. Profiileja on useampia ja ne ovat listattuna suoritusjärjestyksessä:  

  • AllUsersAllHosts – kaikille käyttäjille yhteinen profiili, jota käytetään kaikissa PowerShell sessioissa 
  • AllUsersCurrentHost – kaikille käyttäjille yhteinen profiili, jota käytetään tietyssä PS sessioissa 
  • CurrentUserAllHosts – käyttäjäkohtainen profiili, jota käytetään kaikissa PS sessioissa 
  • CurrentUserCurrentHost – käyttäjäkohtainen profiili, jota käytetään tietyssä PS sessiossa 

PowerShell sessio tarkoittaa tässä nyt sessiota siinä sovelluksessa, jolla PowerShellia ajetaan eli “hostataan”. Se voi olla esimerkiksi Windows PowerShell, PowerShell Core, PowerShell ISE tai VS Code.  

Jokaiselle editorille tulee lisäksi kaksi profiilia: AllUsersCurrentHost ja CurrentUserCurrentHost. Profiileita voi siis olla useitakin, riippuen siitä kuinka monta eri sovellusta PowerShellin ajamiseen koneelta löytyy. 

Esimerkiksi PowerShell Integrated Scripting Environment (ISE)* käyttää omia profiileita, ja VS Code omiaan. Editorikohtaisuus näkyy myös profiilitiedoston nimessä, esim. Microsoft.VSCode_profile.ps1 

*Toim.huom: PowerShell ISE:n kehitystyö on lopetettu, joten VS Code on nykyisin suositeltava kehitysympäristö. Ja hyvä sellainen 🙂 

No MITÄ profiilia näistä nyt sitten pitää tuunata? 

Kussakin sovelluksessa käytettävät profiilit saa helpoiten selville sillä itsellään, eli PowerShellillä. Alla oleva komento palauttaa kaikki ko. sovelluksen käyttämät profiilit: 

$profile | fl -force 

So use the force, Luke. Sillä tästäkin selviää. 

Muokattava profiili riippuu siitä millä laajuudella profiilin asetukset halutaan käyttöön. AllUserAllHosts pätee kaikille käyttäjille kaikissa sessioissa, CurrentUserCurrentHost on käyttäjä- ja sovelluskohtainen profiili. 

Koska värit ja monesti muutkin asiat ovat ns. makuasioita, kannattaa ehkä ensimmäisenä moukaroida omaa profiilia. Omaan käyttöön olen muokannut CurrentUserAllHosts profiilia. 

Ja jottei asia olisi liian yksinkertainen, ei kaikkia edellä mainittuja profiilitiedostoja ole välttämättä oikeasti olemassa vaikka $profile muuttujasta löytyykin polku niihin. Profiilitiedoston olemassaolon voi testata Test-Path-komennolla: 

Test-Path "C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShellISE_profile.ps1" 

Jos profiilia ei ole, se voidaan luoda: 

New-Item $PROFILE.CurrentUserAllHosts -ItemType file -Force 

Profiilin editointi 

Kun profiilien sijainneista on saatu selvyys, päästään itse asiaan. 

Windows PowerShell perusmuotoisena näyttää jotakuinkin tältä: 

Mukavan hajuton ja mauton, mutta täysin toimiva toki. 

Jos PowerShelliä joutuu käyttämään enemmänkin, tähän perusnäkymään olisi mukava saada jotain piristystä, ja ehkä jopa lisää informaatiota. Mukavissa ATK-hommissa häviää helposti ajantaju, joten kellonajalle voisi olla tarvetta. Joskus olisi myös kiva tietää kauanko jonkin komennon suorittaminen kesti ja milloin se ajettiin.  

Sitten vain tekemään. Eli soveltuva profiilitiedosto auki lempieditoriin, kuppi kahvia näppäimistölle ja editoimaan! 

Lisätään promptiin halutut viritykset: 

  • Päivämäärä ja kellonaika 
  • Edellisen komennon aloitusaika ja komennon suorituksen kesto 
  • Tämän hetken hakemistopolku 
  • Työaseman nimi 
  • Ja vielä hieman merkistökikkailua ja väriä pintaan oman maun mukaan, joka helpottaa pidempien komennussessioiden selailua 
function Prompt { 

    write-host ' '  

Write-Host '+-- ' -ForegroundColor Magenta -NoNewLine 

    Write-Host '[' -NoNewLine -ForegroundColor Magenta 

    Write-Host (Get-Date -UFormat "%d/%m/%y %H:%M:%S") -ForegroundColor Green -NoNewline 

if((Get-History) -ne $null){ 

Write-Host '] [LastExecution: ' -NoNewLine -ForegroundColor Magenta 

Write-Host (Get-History)[-1].StartExecutionTime -NoNewLine -ForegroundColor Green 

Write-Host ' ExecutionTime: ' -NoNewline -ForegroundColor Magenta

Write-Host ((Get-History)[-1].EndExecutionTime - (Get-History)[-1].StartExecutionTime) -ForegroundColor Green -NoNewLine  

    } 

Write-Host '] ' -NoNewline -ForegroundColor Magenta 

Write-Host '<' -NoNewline -ForegroundColor Magenta 

    Write-Host (Get-Location) -NoNewline 

Write-Host '> --+' -ForegroundColor Magenta 

Write-Host "+-- [$env:COMPUTERNAME] " -ForegroundColor Magenta -NoNewline 

return "$ "

  } 

Sitten vain tallennuspainiketta, PowerShellin uudelleenkäynnistys ja siitähän tuli hieno! Alla olevassa kuvassa on hienosäädetty myös PowerShell konsolin värejä, joten lopputulos saattaa näyttää hieman erilaiselta värien tai fonttien puolesta. 

Kun ajaa jonkin komennon, tulee seuraavaksi näkyviin myös siihen liittyvät tiedot: 

Jos esimerkin värit aiheuttaa näppylöitä, niitä on tarjolla muitakin, ja listan vaihtoehdoista saa – aivan, PowerShellillä: 

[Enum]::GetValues([System.ConsoleColor])  

Tämä tulostaa listauksen värivaihtoehdoista: 

Black 
DarkBlue 
DarkGreen 
DarkCyan 
DarkRed 
DarkMagenta 
DarkYellow 
Gray 
DarkGray 
Blue 
Green 
Cyan 
Red 
Magenta 
Yellow 
White 

Profiili on siis käytännössä skripti, joka suoritetaan kun PowerShell käynnistetään. Vain mielikuvitus on rajana sen osalta, mitä profiilissa voi säätää. Jos haluat määrittää tietyn hakemistopolun, esimerkiksi PowerShell loitsujen pääkansion, voit määrittää sen lisäämällä Set-Location komennon profiilitiedostoon: 

Set-Location "$home\Documents\PowerShellMagic" 

Voit myös lisätä omia aliaksia, tietoja vapaana olevasta levytilasta tai tehdä miltei mitä vain muitakin temppuja, jotka PowerShellillä on tehtävissä. Näitä saa keksiä vapaasti lisää 🙂 

Pilvikuiskaaja Riku Mustila