Mis on Powershell? Esimesed sammud skriptimises

Allikas: Teadmusbaas

Windows PowerShell

Windows PowerShell on Microsofti ülesannete automatiseerimise ja konfigureerimise haldustööriist, mis koosneb käsuinterpretaatorist ja skriptimiskeelest ning on loodud .NET-raamistikus. PowerShell võimaldab täielikku ligipääsu COM-ile ja WMI-le, võimaldades administraatoritel sooritada administreerivaid ülesandeid nii kohalikes kui ka kaugjuhitavates Windowsi süsteemides. Samuti võimaldab PowerShell ligipääsu WS-Managementile ja CIM-ile, mis võimaldavad kaughallata Linuxi süsteeme ja interneti seadmeid.

Üldiselt sooritatakse PowerShellis administreerivaid ülesandeid cmdlets-e kasutades, mis on spetsiaalsed .NET klasside spetsiifilised operatsioonid. cmdlets-e saab omavahel kombineerida moodustades skripte, eraldiseisvaid programme või luues tavalisi .NET klasse (või WMI/COM objekte). Need töötavad pääsedes ligi andmetele erinevates andmekogudes nagu näiteks failisüsteemid ja registrid, mis on kättesaadavad PowerShellile läbi Windows PowerShelli teenusepakkujate.

Windows PowerShell pakub majutust API-le, millega Windows PowerShelli saab manustada teistesse programmidesse. Need programmid saavad sellisel juhul kasutada Windows PowerShelli funktsionaalsust, et rakendada kindlaid operatsioone; nende hulka kuuluvad ka sellised programmid mida, muidu juhitakse graafilise liidese abil. Seda võimalust kasutab Microsoft Exchange Server 2007, mis võimaldab oma juhtimisfunktsioone kirjutada PowerShell cdmlet-idena. Teised Microsofti rakendused, näiteks Microsoft SQL Server 2008, võimaldavad samuti ära kasutada PowerShell cmdlets-e.

Windows PowerShell sisaldab oma mahukat konsoolipõhist spikrit, mis sarnaneb man pagesiga Unixi shellis. Sellele pääseb ligi cmdletiga Get-Help ning seda saab uuendada värske sisuga kasutades cmdletti Update-Help.

Käsurida

Klikkides PowerShelli ikoonil Images22.jpg avaneb PowerShelli käsurida:

Powershell.jpg

Käsureale võib hakata koheselt kirjutama käske ja neid käivitades tagastatakse koheselt tulemus.

Näiteks tipi käsureale järgnev käsk ja käivita see klahvivajutusega <Enter>:

Get-Help

Käsureale käske kirjutades ei pea käske terves pikkuses välja kirjutama. Pooleldi kirjutatud käskude lõpetamiseks kasuta klahvi <Tab>.

Get-He <Tab>

Kui juba tipitud teksti lõpetamiseks on mitu võimalust võib <Tab> klahvi vajutada korduvalt

Tipi: Get-H <Tab>

Tagastatakse: Get-Help

Vajuta: <Tab>

Tagastatakse: Get-History

Vajuta: <Tab>

Tagastatakse: Get-Host

Vajuta: <Tab>

Tagastatakse: Get-HotFix

Vajuta: <Tab>

Tagastatakse: Get-Help

<Tab> klahv toimib ka käsu parameetrite otsimiseks/lõpetamiseks

Tipi: Get-He <Tab> -<Tab> Tagastatakse: Get-Help -Name

Muutujad

Muutujate nimed algavad PowerShellis alati $ märgiga ja muutujaid on võimalik erinevate käskluste juures korduvalt kasutada. Muutujatele saab omistada nii teksti, numbreid kui ka terveid objekte või koguni objektide massiive. Näiteks

$tekst = „Vastus on „

$b = 6

$c = $a + $b

$c = $a + $b

Või näiteks eelnevalt tagastatud draiverite objektide arvu teada saamiseks võime moodustada tagastatud objektidest uue objekti ja omistada selle muutujale ning seejärel küsida uue muutuja liikmete arvu.

$draiverid = Get-WmiObject –Class Win32_PnpSignedDriver

$draiverid.count

Kuna me seda uut muutujat hiljem kasutada ei taha võime kasutada ka lihtsustatud konstruktsiooni,mis püsivat muutujat ei tekitagi.

(Get-WmiObject –Class Win32_PnpSignedDriver).count

Mitu objekti tagastati?

Märkus! Kui on huvi teada saada millistest meetoditest ja omadustest käskluse poolt väljastatud objekt koosneb, siis võite suvalise käskluse väljundi suunata käskluse Get-Member sisendisse. Tulemuseks saate nimekirja konkreetse objekti kohta.

Tagastatud objektide DeviceID väljal on täpne identifikaator, millise riistvarakomponendi jaoks antud draiver mõeldud on.PCI siinil olevate seadmete korral algab see identifikaator tähtedega PCI ja USB seadmete korral tähtedega USB. Seega täiendame pisut eelmist käsklust

Get-WmiObject –Class Win32_PnpSignedDriver | Where-Object {$_.DeviceID –like „PCI*“}

Mitu objekti nüüd tagastati?

Eelnevas käsus on kasutatud võrdlusoperaatorit –like. Teiste võrdlusoperaatorite kohta loe lisaks Powershelli abiinfost käsuga

Get-Help about_Comparison_Operators

Toru (Pipeline)

Viimati käivitatud käsuga käivitati tegelikult kaks käsklust. Esimese käskluse Get-WmiObject väljund (väljastatud objektid) kanaliseeriti (piped) Where-Object käskluse sisendisse filtreerimiseks. Käskluste kokku kanaliseerimiseks kasutatakse käsureal käskluste vahel märki |. Sellist kanaliseeritud käskluste kogumit nimetatakse toruks (pipeline). Torus liigub korraga üks objekt ja seda objekti on järgneva käskluse juures võimalik kasutada spetsiaalse $_ muutuja abil ehk siis esimese käskluse väljundist tulnud objekt omistatakse automaatselt muutujale $_ ja seda on võimalik järgnevas käskluses kasutada nagu iga teist muutujat.

Skriptiplokk (script block)

Viimases täiendatud käsus on kasutusel veel üks PoweShelli konstruktsioon. Koodilõiku, mis jääb {} vahele nimetatakse skriptiplokiks. Skriptiplokk on käskude või avaldiste kogum, mida on võimalik kasutada kui ühte üksust. Skriptiplokk võib ka aktsepteerida argumente ja tagastada väärtuseid. Antud juhul võrreldakse skriptiplokis, kas torus liikuva objekti (mis on omistatud muutujale $_) omadus DeviceID algab tekstiga PCI või mitte. Kui algab, siis lastakse objekt edasi kui ei, siis filtreeritakse välja.

Olgugi, et selliselt filtreerides oleme saanud tagastatavaid objekte oluliselt vähemaks on jätkuvalt tagastatavat informatsiooni liiga palju. Täiendame veel pisut oma käsku

Get-WmiObject –Class Win32_PnpSignedDriver | Where-Object {$_.DeviceID –like „PCI*“}| Select-Object Description, DriverVersion

Viimase täiendusega suuname tulemused veel torus edasi ja sedapuhku Select-Objectkäsklusele ning näitame ära, milliseid sisendobjekti omadusi me näha tahame. Sel korral on tulemused juba üsna hoomatavadja peaaegu võime tulemusega rahul olla. Häda on veel selles, et tulemused on väga kaootilises järjekorras ja kirjelduse tulp on liialt kitsas (osade kirjelduste tekst lõigatakse lõpust ära). Ka nende probleemide vastu on lihtne lahendus

Get-WmiObject –Class Win32_PnpSignedDriver | Where-Object {$_.DeviceID –like „PCI*“} | Select-Object Description, DriverVersion | Sort-Object Description | Format-Table –AutoSize

Uuri, mida teeb käsklus Format-Table?

Vastus: Format-Table toob välja erinevate käskluste informatsiooni (tagasiside) tabeli kujul

Tutvu ka teiste väljundformaati muutvate käsklustega

Get-Command format* -Module Microsoft.Powershell.Utility

Tulemuste kirjutamine faili

Powershelli käskluste väljundeid saab suunata ka faili. Üks lihtne viis väljundi faili suunamiseks on see, kui anda väljund toru abil edasi käsklusele Out-File. See käsklus kirjutab faili täpselt sellise väljundi, nagu muidu kuvatakse ekraanile.

Proovi, millise faili saad, kui lisad viimasele WMI päringu käsule lõppu:

| Out-File C:\Mingi kaust\FailiNimi.txt

Selliselt toimides on tulemusi küll lihtne faili suunata, aga kindlasti tuleb tähele panna, kas käskluste väljundsuunatakse faili enne või peale Format- käskluste kasutamist. Enne tulemuste faili suunamist võib Format- käskluste asemel kasutada ka ConverTo- käskluseid:

ConvertTo-Csv, ConvertTo-Html, ConverTo-Json, ConvertTo-Xml

Võrdle järgnevate käskluste väljundeid:

Get-WmiObject –Class Win32_PnpSignedDriver | Where-Object {$_.DeviceID –like „PCI*“} | Select-Object Description,DriverVersion | Sort-Object Description | Format-Table | Out-File C:\Mingi kaust\FailiNimi.txt


Get-WmiObject –Class Win32_PnpSignedDriver | Where-Object {$_.DeviceID –like „PCI*“} | Select-Object Description, DriverVersion | Sort-Object Description | ConvertTo-Csv | Out-File C:\Mingi kaust\FailiNimi.csv


Get-WmiObject –Class Win32_PnpSignedDriver | Where-Object {$_.DeviceID –like „PCI*“} | Select-Object Description, DriverVersion | Sort-Object Description | ConvertTo-Html | Out-File C:\Mingi kaust\FailiNimi.html


Get-WmiObject –Class Win32_PnpSignedDriver | Where-Object {$_.DeviceID –like „PCI*“} | Select-Object Description, DriverVersion | Sort-Object Description | ConvertTo-Json | Out-File C:\Mingi kaust\FailiNimi.json

Koostaja

Selle postituse koostas Kevin Puusild