Arvutiteaduse instituut
  1. Kursused
  2. 2025/26 sügis
  3. Operatsioonisüsteemid (LTAT.06.001)
EN
Logi sisse

Operatsioonisüsteemid 2025/26 sügis

  • Pealeht
  • Loengud
  • Praktikumid
  • Viited

Praktikum 14 - Skriptimine Windowsis

Skriptimiseks nimetatakse kergesti käivitatava lühikese koodi programmeerimist, mille eesmärk on enamasti korduvate tegevuste automatiseerimine. Skriptimise kasu avaldub tihti alles siis, kui peate suurt kogust (üle 10) arvuteid üksinda haldama. Võtame lihtsa näite – ainuüksi TÜ Arvutiteaduse instituudis on umbes 500 statsionaarset arvutit + umbes 1000 sülearvutit ning kui IT-administraator tahaks teada, millist operatsioonisüsteemi nad kasutavad ja kas olemasoleva arvuti riistvara on sobiv uusima Windowsi versiooni paigaldamiseks, võtaks iga arvuti läbi käimine ja vajaliku informatsiooni üles tähendamine mitu kuud aega. Käesolevas ja järgnevas praktikumis näitame teile, kuidas antud ülesande lahendamist oluliselt kiirendada.

Eelmises praktikumis tutvusime Linuxi skriptidega. Varem oleme Windowsis pigem graafilist liidest kasutanud. Samas on ka Microsoft alates 2006. aastast oma skriptimise vahenditesse oluliselt investeerinud, mis on muutnud nende pakutava lahenduse tõsiseltvõetavamaks alternatiiviks graafilisele liidesele. Lähenemine on küll natuke teine kui Linuxi terminali puhul – meie jaoks võib-olla kõige olulisem on see, et Powershell kasutab tekstitöötluse asemel objekte. Kui need erinevused rohkem huvi pakuvad, siis näiteks üks suhteliselt vana (2007), aga huvitav võrdlusartikkel on kättesaadav siit: http://www.linux-magazine.com/content/download/63303/487727/version/1/file/Bash_vs._Vista_PowerShell.pdf (NB! Brauser võib lugeda faili ohtlikuks ning seetõttu ei pruugi hüperlink töötada. Sellisel juhul kopeerida link otse otsinguribale.)

Nii mõnelegi teist on ilmselt tuttav must Command Prompt'i (CMD) ekraan, mis on mitmes mõttes juba vananenud, mistõttu keskendume oma lahendustes Powershelli kasutamisele. Selle praktikumi eesmärk on anda ülevaatlik sissejuhatus antud töövahendi eripäradesse ja kasutamisse.

Töövahendid

  • Powershell (Lühend: PS)
  • Powershell ISE (Lühend: PS ISE või lihtsalt ISE)
  • Command Prompt (Lühend: cmd)

Ettevalmistavad tööd

  • Avage Powershell tavakasutaja õigustes.
  • Enne tööle asumist lugeda Urmas Tamm'e ja Alo Peets'i koostatud detailset Powershelli juhendit siit: Powershelli Ülevaade PDF.

Versioonid

Powershellist on kasutusel päris mitu versiooni. Windows 10-ga aastast 2016 tuleb kaasa versioon 5.1 Sama versioon 5.1.* on siiani kasutusel ka meie praktikumis kasutatavas Windows 11 virtuaalmasinas. Et kontrollida, milline täpne versioon on paigaldatud teie operatsioonisüsteemi, saate kasutada süsteemset objekti $PSVersionTable. Sarnaselt objektidega tavalises programmeerimises on võimalik ka siin punkti (.) abil vaadata konkreetse välja väärtust: ($PSVersionTable.[väljanimi]).

Käsud

  1. Käskude nimekirja saamiseks on käsk Get-Command. Kui selle sisestate, näete, et nimekiri on pikk. Käskude nimed koosnevad üldiselt tegusõna-nimisõna-paaridest, mis viitavad vastavalt sellele, mida ja millega te teha saate. Et leida endale huvipakkuvaid käske, saab kasutada filtreid.
  2. Näiteks võime välja filtreerida kõik käsud, mille tegevus on "get": Get-Command -Verb Get. Sarnaselt saame leida ka kõik süsteemsete teenustega seotud käsud: Get-Command -Noun Service.
  3. Juba varem õpitud käsu "man" asemel saab siin abi saamiseks kasutada käsku Get-Help, mille argumendiks tuleb anda käsk, mille kohta abi tahetakse.
    1. Näiteks uurime abiinfot käsu Get-Process kohta. Selgub, et selle käsu dokumentatsioon ei ole täielik.
    2. Nüüd on meil kaks võimalust: kas kasutame lisaparameetrit -Online, mis viib meid vastava veebiallikani, või kasutame käsku Update-Help, mis uuendab käskude dokumentatsiooni. Viimane käsk võtab esimest korda jooksutades tavaliselt omajagu aega ja koormab ketast, mistõttu jääme siin veebis oleva dokumentatsiooni juurde.
    3. Uuri dokumentatsioonist, kuidas leida protsess, mille id on 0.
  4. Käivitame programmi notepad ja leiame dokumentatsiooni abiga käsu selle protsessi sulgemiseks. (Otsingu puhul võiks tegusõnana kasutada stopi.)

Powershell ja skriptifailid

Kui soovime oma koostatud keerukamaid käske korduvalt kasutada, siis tasub neist (analoogiliselt Linuxiga) luua skriptifailid, mida saab ka hiljem kasutada.

  1. Liikuge PSi kasutades oma kodukataloogi.
  2. Loome sinna faili ja avame selle: notepad tere_maailm.ps1.
  3. Faili sisu peaks olema alltoodud kujul. (Tasub märgata, et reavahetuse sümbol on tavapärasest erinev.)
Write-Host
Write-Host 'Tere, maailm!'
Write-Host "Kena päeva... `n"
  1. Käivitame skripti, kasutades käsku .\tere_maailm.ps1.
  2. Kui faili käivitamine õnnestus, siis see tähendab, et te olete ka varem mingeid skriptifaile jooksutanud. Üldiselt tuleb see aga otseselt lubada. Tegu on vaikimisi turvaseadete osaga, et kasutaja kogemata oma arvutis pahatahtlikke skripte käivitada ei saaks.
  3. Käivitamise lubamiseks kasutame alljärgnevat süsteemi.
    1. Kõigepealt uurime, milline turvatase on hetkel süsteemis seatud: Get-ExecutionPolicy (jätke see omale meelde).
    2. Märgime selle väärtuse omale üles, et saaks selle hiljem taastada. Et ei peaks selleks käsi klaviatuurilt tõstma, võime väärtuse lihtsalt faili suunata: Get-ExecutionPolicy > execution_policy.txt (käsu väljundi faili suunamine töötab samamoodi nagu Linuxis).
    3. Sisestage käsk Set-ExecutionPolicy -ExecutionPolicy RemoteSigned. Nii lubate käivitada lokaalselt ise tehtud skripte ja Internetist alla tõmmatud skriptifailide puhul nõutakse signeeritust. Üldiselt brauserid panevad Internetist tõmmatud faili meta-andmetesse vastava märke juurde. Seda olete võibolla kogenud, kui tõmbate alla mingit EXE-faili, mis on signeerimata ja üritate käivitada (vaja eelnevalt faili omadustest vastav linnuke eemaldada).
    4. Ka nüüd võiks selguda, et õiguste muutmistel tekkis probleem, kui te jooksutasite seda käsku tavakasutaja õigustes.
    5. Avage PS administraatori õigustes (paremklikk Powershelli ikoonil stardimenüüs ja käivitada administraatori õigustes).
    6. Jooksutage käsk ja sulgege admin-õigustes olev PSi aken.
  4. Nüüd proovime uuesti oma skripti käivitada – seekord võiks see ilusasti õnnestuda.
    1. Turvalisuse huvides on soovitatav taastada käsuga Get-ExecutionPolicy saadud väärtus (peaks olema vaikimisi "Restricted") peale praktikumi lõppu. Nii väldite, et keegi või miski (nt mingi (paha) programm) saab Powershell skriptifaili käivitada).

Powershell ISE

Nagu nägime, siis võime skriptide loomiseks ka tavalist tekstiredaktorit kasutada ja käsud lihtsalt .ps1-laiendiga faili kirjutada. Pikemate skriptide loomisel on aga analoogiliselt programmeerimisega mugavam kasutada mõnda keskkonda, kus on võimalused nii kirjutamiseks kui kirjutatu testimiseks.

  1. PowerShell ISEt on kõige lihtsam avada järgnevate tegevustega:
    1. Liigume Windows-klahvi kasutades Start-menüüsse.
    2. Kirjutage "Powershell ISE".
    3. Kuvatud vastustest teeme parema kliki Powershell ISE peal ja valime "Run as Administrator".
    4. Avanenud tarkvaras valime menüüst View -> "Show Script Pane".
    5. Nüüd avame varem tehtud skripti: File -> Open -> tere_maailm.ps1.
    6. Skripti jooksutamiseks kasutame rohelist noolekest.

Näide

Kogu Windowsi konfiguratsiooniinfole on võimalik juurde pääseda, kasutades WMI (Windows Management Instrumentation) liidest. WMI ei ole pelgalt informatsiooni pärimise liides, vaid selle abil on võimalik ka süsteemi konfiguratsiooni muuta. WMIle ligi pääsemiseks kasutame PowerShelli ja selles olevat käsku Get-WmiObject. Kõikide WMI klasside kuvamiseks kasutage käsku Get-WmiObject -list (klasside nimekirja saab filtreerida, lisades käsu lõppu *märksõna*, näiteks Get-WmiObject -list *user* ). Konkreetse klassi tagastatavate andmete uurimiseks saab kasutada käsku Get-WmiObject -class Win32_klassinimi näiteks Get-WmiObject Win32_NetworkAdapterConfiguration. Kuna osad klassid ei tagasta vaikimisi kõiki võimalikke parameetreid, siis kõikide klassi parameetrite nägemiseks lisa käsu lõppu vastavalt vajadusele Powershelli käsklus select *, Format-List * või Format-Table *. Andmete filtreerimiseks võib kasutada -Filter-parameetrit. Näiteks võrrelge käske Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='True'" ja Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='True'" | select *.

Siin on näide vormindatud ja filtreeritud väljundiga käsust, mis kirjutab väljundi faili. Harjutamiseks on soovitatav eemaldada käsu lõpust järjest pipe (toru, |) ja vaadata kuidas väljund muutub. Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled='True'" | Select-Object PSComputername, Description, IPAddress, IPSubnet, DefaultIPGateway | Sort-Object DHCPEnabled | Format-List | Out-File -FilePath "C:\FailiNimi.txt" -Append

Iseseisev ülesanne

Tähelepanu! – Enne käesoleva töö juurde asumist tööta kindlasti tähelepanelikult läbi tööjuhendi juurde kuuluv PDF-dokument: Powershelli ülevaade.

Soovitatav on aluseks võtta alus.ps1 (eemalda faililaiend ".txt"). Siin Powershelli failis on realiseeritud tulemuse väljastamise funktsioon ning tehtud ka paar illustreerivat näidiskasutust. Soovi korral võite kõike muuta.

Koostage ja esitage skript, mis kirjutab testarvuti kohta järgneva info faili:

  1. Masina nimi (hostname), PowerShelli versioon ja Windowsi versioon (Vihje: Ei pea leidma ühe käsuga, teil kulub selle info saamiseks arvatavasti 2 käsku.)
  2. Võrgu konfiguratsioon (IP-aadress, võrgumask (network mask), vaikelüüs (gateway), kas DHCP on lubatud ja MAC-aadress (Vihje: vaata näidet ülalpool)
  3. Arvuti protsessori kirjeldus ja põhimälu RAM kogus (leiab: Win32_ComputerSystem)
  4. Graafikakaardi nimi, draiveri versioon, kuupäev ja ekraani lahutus (märksõna VideoController)
  5. Arvuti kõvaketaste informatsioon (partitsioonitabel, mitu GB on arvuti kettad mahutavuselt, mitu GB vaba ruumi on C:-kettal)
  6. PCI-siinil olevate seadmete draiverite info (kirjeldus, tootja ja versioon) (Vihje: vaata pikka PDF-juhendit, seal on näide olemas)
  7. Arvutis olevad kasutajad (nimi, kirjeldus, kas on lokaalne kasutaja (LocalAccount) ja kas on keelatud (Disabled))
  8. Käimasolevate protsesside arv
  9. 10 viimasena käivitatud protsessi (nimi, PID ja käivitamise aeg (StartTime)). Sorteerimise aluseks võtta parameeter StartTime.
  10. Arvuti kuupäev ja kellaaeg, formaat olgu näiteks 16. mai puhul: "16.05.2025 15:26:56"

NB! Iga küsimuse vastus peaks olema töödeldud mõistlikule inimloetavale kujule ja info peab olema vastusest kergesti leitav, sh peab olema vastuse ees küsimuse nr. Kogu peaklassi või näiteks kogu käsu Get-Process väljund küsimuse Käimasolevate protsesside arv vastuseks ilma täiendava töötlemiseta (ridade arvu kokku lugemiseta) ei ole piisav.

Tulemus

Lahenduseks esitada GitHub/GitLab-lehel Powershelli skripti väljundfail nimega <eesnimi_perenimi.out.txt> (nt "erkki_laaneoks.out.txt") ja aruande lehele kopeerige skript nimega <eesnimi_perenimi.ps1> (või vajadusel <eesnimi_perenimi.ps1.txt>) (nt "erkki_laaneoks.ps1") ning kirjeldage olulisemaid käsu osasid skriptis (kommentaarina, näidis failis alus.ps1.txt olemas). NB!: faili nimes olevad mitte täpitähed (tähti "i" ja "j" loeme siinkohal mitte täpitähtedeks) ja ladina-tähed, tühikud jms asendage sobivaga (nt "Õnne Aita" => "6nneAita"/"OnneAita").

Moodle esitamise otselink: https://moodle.ut.ee/mod/assign/view.php?id=1226994

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused