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 siin lingi taga on üks suhteliselt vana (2007) aga huvitav võrdlusartikkel.
Nii mõnelegi teist on ilmselt tuttav must Command Prompt'i (CMD) ekraan, mis on mitmes mõttes juba vananenud ja seetõ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 ja Alo Peets koostatud detailset
Powershelli
juhendit siit Powershell Ülevaade PDF.
Versioonid
Powershellist on kasutusel päris mitu versiooni. Windows 10-ga 2016 tuleb kaasa 5.1. Et kontrollida, milline versioon on paigaldatud teie operatsioonisüsteemi, saate kasutada süsteemset objekti $PSVersionTable
. Sarnaselt objektidele tavalises programmeerimises on võimalik ka siin "." abil vaadata konkreetse välja väärtust. ($PSVersionTable.[väljanimi]
).
Käsud
- 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. - 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äsudGet-Command -Noun Service
. - Juba varem õpitud "man" käsu asemel saab siin abi saamiseks kasutada käsku
Get-Help
, mille argumendiks tuleb anda käsk, mille kohta abi tahetakse.- Näiteks uurime abiinfot käsu
Get-Process
kohta. Selgub, et selle käsu dokumentatsioon ei ole täielik. - Nüüd on meil kaks võimalust: kas kasutame lisaparameetrit
-Online
, mis viib meid vastava veebiallikani või kasutame käskuUpdate-Help
, mis uuendab käskude dokumentatsiooni. Viimane käsk võtab esimest korda jooksutades tavaliselt omajagu aega ja koormab ketast, seetõttu jääme siin veebis oleva dokumentatsiooni juurde. - Uuri dokumentatsioonist, kuidas leida protsess, mille id on 0.
- Näiteks uurime abiinfot käsu
- Käivitame programmi
notepad
ja leiame dokumentatsiooni abiga käsu selle protsessi sulgemiseks. (Otsingu puhul võiks tegusõnana kasutadastop
)
Powershell ja skriptifailid
Kui soovime oma koostatud keerukamaid käske korduvalt kasutada, siis tasub neist (analoogiliselt Linuxiga) luua skriptifailid, mida saab ka hiljem kasutada.
- Liigu PS'i kasutades oma kodukataloogi.
- Loome sinna faili ja avame selle
notepad tere_maailm.ps1
. - 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"
- Käivitame skripti kasutades käsku
.\tere_maailm.ps1
- 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.
- Käivitamise lubamiseks kasutame alljärgnevat süsteemi.
- Kõigepealt uurime, milline turvatase on hetkel süsteemis seatud
Get-ExecutionPolicy
. - 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) - Sisesta käsk
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
- Ka nüüd võiks selguda, et õiguste muutmistel tekkis probleem, kui te jooksutasite seda käsku tavakasutaja õigustes.
- Avage PS administraatori õigustes (parem klikk Powershell ikoonil stardimenüüs ja käivita administraatori õigustes.)
- Jooksutage käsk ja sulgege admin õigustes olev PS aken.
- Kõigepealt uurime, milline turvatase on hetkel süsteemis seatud
- Nüüd proovime uuesti oma skripti käivitada - seekord võiks see ilusasti õnnestuda.
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.
- "PowerShell ISE" on kõige lihtsam avada järgnevate tegevustega:
- Liigume Windows klahvi kasutades Start menüüsse.
- Kirjutage "Powershell ISE"
- Kuvatud vastustest teeme parema kliki "Powershell ISE" peal ja valime "Run as Administrator".
- Avanenud tarkvaras valime menüüst
View -> "Show Script Pane"
- Nüüd avame varem tehtud skripti, selleks
File -> Open -> tere_maailm.ps1
- 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. WMI-le 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
. 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.
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 Powershell Ülevaade.
Koostage ja esitage skript, mis kirjutab testarvuti kohta järgneva info faili:
Masina nime
(hostname),PowerShelli versiooni
jaWindowsi versiooni
- Võrgu konfiguratsioon (
IP-aadress
,võrgu mask
(network mask),gateway
, kasDHCP on lubatud
jaMAC aadress
(vihje vaata näidet juhendist). - Arvuti
protsessori
kirjeldus ja põhimäluRAM
kogus (leiab:Win32_ComputerSystem
) Graafikakaardi nimi
,draiveri versioon
,kuupäev
jaekraani lahutus
(märksõnaVideoController
)- Arvuti kõvaketaste informatsioon (
partitisoonitabel
,mitu GB on arvuti kettad mahutavuselt
, mitu GB vaba ruumi onC:
kettal) - PCI siinil olevate seadmete draiverite info (
kirjeldus
,tootja
javersioon
) (Vihje: vaata pikka PDF juhendit, seal on näide olemas) - Arvutis olevad kasutajad (
nimi
,kirjeldus
, kas on lokaalne kasutaja (LocalAccount
) ja kas on keelatud (Disabled
)) Käimasolevate protsesside arv
10 viimasena käivitatud protsessi
(nimi
,PID
jakäivitamise aeg
(StartTime
). Sorteerimise aluseks võttaStartTime
parameeter.- Arvuti
kuupäev
jakellaaeg
.
NB! Iga küsimuse vastus peaks olema töödeldud mõistlikule inimloetavale kujule ja info peab olema vastusest kergesti leitav. Kogu peaklassi või näiteks kogu Get-processes
väljund küsimuse Käimasolevate protsesside arv?
ilma täiendava töötlemiseta (ridade arvu kokku lugemiseta) vastuseks ei ole piisav.
Tulemus
Lahenduseks esitada courses lehel Powershelli skripti väljundi fail ja Wiki lehele kopeerige skript ja kirjeldage olulisemaid käske/käsu osasid skriptist.
11. Praktikum 11 - Skriptimine Windowsis