đ Strontium
TĂ€rpit
Format Operator
LöydÀt tÀstÀ lisÀtietoa about_Operators-dokumentaatiosta. Alla lyhyt kÀyttöohje:
$a = 42
$b = "The Universe"
$c = "Life"
$d = "Everything"
# Tulostaessa tarvit sulut
Write-Host ("The answer to {0}, {1}, and {2} is: {3}" -f $c, $b, $d, $a)
Mukavuus
Visual Studio Coden kÀyttö
Warning
Mukavuus-otsikon alla on oletus, ettÀ sinulla on kÀytössÀ Visual Studio Code, PowerShell Extension ja lokaalisti asennettu PowerShell.
Bash-kielessÀ on hyvin pieni mÀÀrÀ sisÀÀnrakennettuja komentoja, joten kyseistÀ kieltÀ kirjoittaa melko kevyesti ilman code autocompletion ominaisuutta. PowerShellin kanssa tÀtÀ kannattaa opetella hyödyntÀmÀÀn. Voit lukea lisÀÀ VS Code: IntelliSense-dokumentaatiosta.
Kuva 1: Kun kirjoitat Get-
, aukeaa valikko, josta voit valita haluamasi cmdletin. PowerShell Extensionin kÀyttö nopeuttaa kirjoittamista ja vÀhentÀÀ virheitÀ.
Muita hyödyllisiÀ pikaneuvoja ovat:
- F8 : Aja maalattu osa komentoa VS Code Terminalissa (ei kontissa!)
- F1 : Avaa komentopaneeli.
- Kirjoita hakukenttÀÀn
PowerShell
ja katso mitÀ kaikkea löydÀt.
- Kirjoita hakukenttÀÀn
- Ctrl+, : Avaa asetukset.
- Kirjoita hakukenttÀÀn
@ext:ms-vscode.powershell
ja saat esille kaikki PowerShell Extensionin asetukset. (đ Mac: Cmd+,:)
- Kirjoita hakukenttÀÀn
PowerShell Extensionin asetuksiin pÀÀset painamalla Ctrl+,
ja kirjoittamalla hakukenttÀÀn PowerShell
. TÀÀltÀ löydÀt kaikki asetukset, joita voit muokata.
Promptin muokkaus
Jos/kun kÀytÀt lokaalia PowerShelliÀ syntax highlightingin toimivuuden takaamiseksi tai ympÀristöÀ muokkaamattomien srkriptien ajamiseksi, olet varmasti huomannut, ettÀ prompt on tyypillisesti melko pitkÀ. Se on esimerkiksi:
Eikö olisi mukavampaa, jos prompt olisi:
BashistÀ sinulle pitÀisi olla tuttua Start-up -tiedosto .bashrc
ja ympÀristömuuttuja PS1
, joka sÀÀtÀÀ sinun promptiasi. PowerShellissÀ hitusen vastaava tiedosto on profiilitiedosto, jonka sijainti sinulle selviÀÀ komennolla:
PS> $profile
# tai ks. kaikki
PS> $profile | Select-Object *
# avaa haluamasi VS Codessa
PS> code $profile.CurrentUserAllHosts
# kun olet muokannut, kÀynnistÀ joko shell tai sourcea profiilitiedosto
PS> . $profile.CurrentUserAllHosts
Promptin muotoilusta vastaa funktio prompt
. Voit ylikirjoittaa tÀmÀn funktion yhden istunnon ajaksi terminaalissa. PysyvÀmpi muutos syntyy muokkaamalla profiilitiedostoa, koska se ladataan joka kerta PowerShellin kÀynnistyessÀ. Tutustu tÀhÀn liittyviin helppeihin (about_Prompts, about_Profiles).
function prompt {
switch ((Get-Location).Provider.Name) {
FileSystem { $p = Split-Path -leaf -path (Get-Location) }
Default { $p = (Get-Location).Drive.Name }
}
"PS $p> "
}
PyörÀÀ ei kannata keksiÀ uusiksi. YllÀ oleva prompt on muokattu superuser: Configure Windows PowerShell to display only the current folder name in the shell prompt-keskustelun vastauksista. Vaihtoehtoinen tapa olisi kÀyttÀÀ valmiita teemoja esimerkiksi oh-my-posh:n avulla.
Warning
Muista, ettÀ sinun on pitÀnyt ajaa /app/scripts/localhelp.ps1
, joka lataa koneelle tallennetun helpin, tai komento Update-Help
, joka lataa helpin netistÀ, jotta help oikeasti sisÀltÀÀ jotakin. Vaihtoehto on toki lukea esimerkiksi about_Prompts verkosta.
TehtÀvÀt
TehtÀvÀ: Arvaa numero
Luo ohjelma, joka generoi luvun vÀliltÀ 1-1000 ja pyytÀÀ kÀyttÀjÀÀ arvaamaan sen. Ohjelma antaa vihjeen, onko arvattu luku suurempi vai pienempi kuin generoitu luku. Ohjelma lopettaa, kun kÀyttÀjÀ arvaa oikein. TÀmÀ on jo kerran tehty Bashilla, joten voit kÀyttÀÀ sitÀ pohjana logiikan suhteen.
LisÀÀ ohjelmaan ominaisuus, ettÀ se kellottaa kÀyttÀjÀn peliajan ja tulostaa sen lopuksi ruudulle. Pelatessa tulosteen pitÀisi myötÀillÀ alla olevaa esimerkkiÀ:
Arvaa luku vÀliltÀ 1-1000
=================================================
Arvaa luku: 369
đ Liian pieni
Arvaa luku: 371
đ Liian suuri
Arvaa luku: 370
đ Oikein! Arvasit luvun 370
Peliaika: 00:00:10.1029581
Varmista, ettÀ pelaaja voi halutessaan lopettaa pelin. Minun toteutuksessa mikÀ tahansa muu syöte kuin kokonaisluvuksi parsittava syöte lopettaa pelin (esim. exit
tai tyhjÀ merkkijono).
Vihje
Peliajan kellottamiseen voit kÀyttÀÀ System.Diagnostics.Stopwatch
-luokkaa. Ohje löytyy PowerShell Communityn DevBlogs: Measuring average download time -artikkelista.
TehtÀvÀ: Reminder
Aivan kuten ylempi, myös tÀmÀ tehtÀvÀ on sinulle tuttu Bash-osiosta. Luo kaksi ohjelmaa, jotka toimivat yhdessÀ. Toinen luo, toinen nÀyttÀÀ muistiinpanoja.
install_remind.ps1
- Luo aliakset
remind
jaremember
, jotka suorittavatremind.ps1
- jaremember.ps1
-skriptit.
- Luo aliakset
remember
- Kysyy kÀyttÀjÀltÀ muistutuksia, jotka tallennetaan
$HOME/.reminder
-tiedostoon. - TyhjÀ syöte lopettaa muistutusten kirjoittamisen.
- Formaatti:
[timestamp] Muistutus
- Kysyy kÀyttÀjÀltÀ muistutuksia, jotka tallennetaan
reminder
- Tulostaa koko muistutustiedoston sisÀllön.
Alla esimerkki asennuksen ja kummankin sovelluksen toiminnasta. Komentojen vÀliin on lisÀtty tyhjÀ rivi lukemisen helpottamiseksi:
PS /> . /app/scripts/remind_install.ps1
PS /> remember
Enter note (quit with empty note)
>>> : Buy an egg
>>> : Buy a chicken
>>> : Which one first? Help!
>>> :
PS /> remind
Your reminders are as follows:
[1739541147] Buy an egg
[1739541151] Buy a chicken
[1739541156] Which one first? Help!
TehtÀvÀ: Verb-Noun generaattori
KehitÀ generaattori, rnd-cmdlet.ps1
, joka luo uudenlaisia cmdlet-pÀteviÀ nimiÀ, kuten Get-Pizza
tai Set-Spam
. Tee ohjelma siten, ettÀ, verbi arvotaan PowerShellin kÀytössÀ olevista verbeistÀ. Substantiivi sen sijaan noudattaa seuraavaa logiikkaa:
- Jos kÀyttÀjÀ antaa argumentin skriptille, kÀytÀ sitÀ.
- Jos ei, yritÀ noutaa substantiivi REST API:sta.
- Osoite:
https://random-word-api.herokuapp.com/word
- Osoite:
- Jos ei onnistu, poimi satunnainen sana sanakirjasta.
REST API:n kutsumiseen saat apua alemmasta vinkistÀ, jos et itse keksi ratkaisua.
Jos tarvitset helpomman tehtÀvÀn
Vinkki Verbi
Kokeile komentoa Get-Verb
.
Vinkki REST API
function getNoun {
try {
$url = "https://random-word-api.herokuapp.com/word"
$response = Invoke-RestMethod -Uri $url -Method Get
$noun = (Get-Culture).TextInfo.ToTitleCase($response[0])
}
catch {
Write-Warning "Using a predefined list."
$noun = Get-Random -InputObject $nounVocabulary
}
return $noun
}
TehtÀvÀ: Staattinen analyysi (PSScriptAnalyzer)
Bashin kanssa kÀytimme ohjelmaa shellcheck
, joka analysoi skriptin ja antaa palautetta mahdollisista virheistÀ. PowerShellille vastaava työkalu on PSScriptAnalyzer
. Sen pitÀisi olla asennettuna ja aktiivsena, mutta voit tarkistaa, löytyykö se Get-Module cmdletillÀ:
Jos ei ole:
TÀmÀn jÀlkeen tarkista skriptisi:
Korjaa kaikki virheet ja varoitukset. Jos jokin virhe toistuu useita kertoja, harkitse Find & Replace -toiminnon kÀyttöÀ Visual Studio Codessa. Ole kuitenkin varovainen, ettet korvaa jotain, mitÀ et halua korvata!
Tip
Saatat huomata varoituksia, joiden kuvaus on: Missing BOM encoding for non-ASCII encoded file 'some_file.ps1
.
NÀmÀ liittyvÀt Windows PowerShell -yhteensopivuuteen. TÀllÀ kurssilla helpoin tapa sivuuttaa ongelma on hiljentÀÀ nÀmÀ varoitukset. TÀmÀ onnistuu helpoiten luomalla seuraava tiedosto skriptihakemistoon:
Huomaa, ettÀ tiedoston nimen tulee olla juurikin tuo sama. Muutoin Invoke-ScriptAnalyzer
ei osaa etsiÀ sitÀ.