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