A PowerShell programozási nyelv

Példaprogramok

A scriptek futtatásához A PowerShell scriptek hagyományosan ps1 kiterjesztésű fájlok. Meghívásuk egyszerű a Powershell konzolból, egyszerűen csak be kell írni a nevüket a konzolba.

Példa: Legyen a scriptünk neve script.ps1 és tegyük fel, hogy ez a C meghajtó gyökerében található, ekkor a scriptünk lefuttatható a C:\script.ps1 beírásával, vagy ha az aktuális könyvtár a C:\ akkor egyszerűen csak ./script.ps1. VIGYÁZAT! A script.ps1 hívás csak akkor működik, ha a scriptünk elérési útja benne van a PATH környezeti változóban.

Elképzelhető, hogy hibaüzenetet kapunk, ekkor próbáljuk meg a script futtatását a "Set-ExecutionPolicy unrestricted" parancs végrehajtása után.

PowerShell 1.0 példaprogramok

Az alábbi öt egyszerű példaprogramot Lehoczki Krisztián készítette. A scriptek nem túl bonyolult feladatokat oldanak meg, de sok PowerSell sajátosságot bemutatnak. Az 5 program egyben letölthető innen.

A név után zárójelben szerepel a scriptfájl neve, és a feladatleírás végén találhatóak a kulcsszavak, amelyek a program írása közben fontos szerepet játszottak.

Maximumkeresés a paramétertömbben (maxker.ps1)

A paraméterként megadott számok közül (a program a szöveges paramétereket hagyja ki) válasszuk ki a legnagyobbat.

paraméterkezelés, típusegyeztetés

Maradékos osztás (divide.ps1)

Számoljuk ki a paraméterben megadott két szám hányadosát (alsó egészrész) és osztási maradékát. A program jelezze, ha nullával akarunk osztani.

típusos változók, kivételkezelés

Két fájl összefésülése soronként(merge.ps1)

Fésüljünk össze két paraméterként teljes elérési úttal megadott szöveges fájlt a result.txt nevű fájlba.

fájlkezelés, kimenet átirányítása fájlba

Megadott programok erőszakos bezárása(killall.ps1)

A paraméterként megadott programnevek minden futó példányát zárjuk be, és írjuk ki a bezárt példányok számát fajtánként. Tegyük fel, hogy a megadott programnév helyes, és fut belőle legalább egy példány.

cmdletek használata, valós probléma megoldása, objektumkezelés

A felhasználó üdvözlése grafikus felülettel (gui.ps1)

Készítsünk grafikus alkalmazást, ami felületen megadott név alapján üdvözli a felhasználót gombnyomásra.

Grafikus .NET alkalmazás készítése

Sort példaprogram

Készítés éve: 2009
Szerző neve: Horváth András
Használt fejlesztőeszköz: Windows Powershell 1.0

A beépített Sort utasítást (pontosabban: Sort-Object -et) szemléletető példaprogram.
Az 1 gigabájtnál több szabad hellyel rendelkező meghajtókat listázza ki a program.
Futtatás előtt ahhoz, hogy be tudjuk tölteni a Powershell munkamenetünkbe a példaprogramot, ki kell adni a "Set-ExecutionPolicy unrestricted" utasítást (idézőjelek nélkül). Vista alatt rendszergazdaként kell elindítani a Powershell-t, máskülönben nem lesz jogosultságunk kiadni az utasítást. Pl.:

PS D:> Set-ExecutionPolicy unrestricted

Ezután lépjünk abba a könyvtárba, ahová kicsomagoltuk a példaprogramot és töltsük be az alábbi parancs segítségével:

PS D:Examples> . ./sortExample.ps1

Ezután mint bármilyen más utasítást, hívhatjuk meg a példaprogramot:

PS D:\Examples> sortExample

Letöltés

Select példaprogram

Készítés éve: 2009
Szerző neve: Horváth András
Használt fejlesztőeszköz: Windows Powershell 1.0

A beépített Select utasítást szemléletető példaprogram.
Kilistázza azoknak a futó folyamatoknak a nevét és az általuk allokált memóriát, amelyek több mint 20 megabájt memóriát allokáltak maguknak.
Futtatás előtt ahhoz, hogy be tudjuk tölteni a Powershell munkamenetünkbe a példaprogramot, ki kell adni a "Set-ExecutionPolicy unrestricted" utasítást (idézőjelek nélkül). Vista alatt rendszergazdaként kell elindítani a Powershell-t, máskülönben nem lesz jogosultságunk kiadni az utasítást. Pl.:

PS D:> Set-ExecutionPolicy unrestricted

Ezután lépjünk abba a könyvtárba, ahová kicsomagoltuk a példaprogramot és töltsük be az alábbi parancs segítségével:

PS D:\Examples> . ./selectExample.ps1

Ezután mint bármilyen más utasítást, hívhatjuk meg a példaprogramot:

PS D:\Examples> selectExample

Letöltés

RSS-olvasó példaprogram

Készítés éve: 2009
Szerző neve: Horváth András
Használt fejlesztőeszköz: Windows Powershell 1.0

RSS-olvasó program.
A paraméter által megadott rss-t beolvassa, majd kiírja az utolsó 5 bejegyzést, amennyiben paraméter nélkül hívjuk meg, akkor az Order of the Stick webcomic rss-ét fogja beolvasni.
Futtatás előtt ahhoz, hogy be tudjuk tölteni a Powershell munkamenetünkbe a példaprogramot, ki kell adni a "Set-ExecutionPolicy unrestricted" utasítást (idézőjelek nélkül). Vista alatt rendszergazdaként kell elindítani a Powershell-t, máskülönben nem lesz jogosultságunk kiadni az utasítást. Pl.:

PS D:\> Set-ExecutionPolicy unrestricted

Ezután lépjünk abba a könyvtárba, ahová kicsomagoltuk a példaprogramot és töltsük be az alábbi parancs segítségével:

PS D:\Examples> . ./rssExample.ps1

Ezután mint bármilyen más utasítást, hívhatjuk meg a példaprogramot: (megadhatunk paraméterként rss elérési utat is)

PS D:\Examples> rssExample

Letöltés

Grafikus RSS-olvasó példaprogram

Készítés éve: 2009
Szerző neve: Horváth András
Használt fejlesztőeszköz: Windows Powershell 1.0

Grafikus RSS-olvasó program.
A paraméter által megadott rss-t beolvassa, majd kiírja az utolsó 5 bejegyzést, amennyiben paraméter nélkül hívjuk meg, akkor az Order of the Stick webcomic rss-ét fogja beolvasni.
A futtatáshoz szükséges, hogy betöltsük az rssExample.ps1 fájlt is.
Futtatás előtt ahhoz, hogy be tudjuk tölteni a Powershell munkamenetünkbe a példaprogramot, ki kell adni a "Set-ExecutionPolicy unrestricted" utasítást (idézőjelek nélkül). Vista alatt rendszergazdaként kell elindítani a Powershell-t, máskülönben nem lesz jogosultságunk kiadni az utasítást. Pl.:

PS D:\> Set-ExecutionPolicy unrestricted

Ezután lépjünk abba a könyvtárba, ahová kicsomagoltuk a példaprogramot és töltsük be az alábbi parancs segítségével:

PS D:\Examples>. ./rssExample.ps1
PS D:\Examples>. ./rssGraphicExample.ps1

Ezután mint bármilyen más utasítást, hívhatjuk meg a példaprogramot:

PS D:\Examples> rssGraphicExample

Letöltés

Hálózati csomagokat figyelő nagyobb példa

PowerShell Code Repository: Get-Packet

PowerShell 2.0 példaprogramok

Készítette: Erdélyi Viktor, 2010

Fejlesztőkörnyezet: PowerShell ISE x64

A példakódok UTF-16(!) kódolásúak (ez a PowerShell ISE alapértelmezése).

Backup script

A konfigurációs fájlban (backup.txt) megadott forrásmappák tartalmáról biztonsági másolatot készít timestampekkel ellátott tömörített fájlokba. A készített fájlokat az összes megadott célmappában elhelyezi. A konfigurációs fájlt abba a mappába kell tenni, ahol maga a script is található, formátuma pedig a következő:
TARGET=c:\backup S:\ELTE\Prognyelvek4\ S:\KeePass ...

TARGET=mappa formátumban kell a célmappákat megadni. Amelyik sorban csak egy elérési útvonal szerepel, azt forrásnak tekinti.

backup.zip

BeadTester beadandó-ellenőrző program + példabeadandó

A program célja az összes hallgató beadandójának automatikus ellenőrzése. A beadandókat lefuttatja az előre megadott tesztfájlokon, és a kimeneteiket összehasonlítja a referenciaeredményekkel.

A program egy lehetséges kimenete

A példabeadandó a következő feladatot oldja meg:

Adott a "menetrend.txt" adatfájl, ami egy adott reptérről induló gépek menetrendjét tartalmazza a következő alakban:

Járatszám Hova Tervezett Várható Term. Megj. W6201 London Luton 06:00 06:37 1 Felszállt LH3449 Frankfurt 07:05 07:15 2A Felszállt BA4450 London-LGW 07:20 07:34 2B Felszállt BT5770 Berlin TXL 07:25 07:25 2A Felszállt MA400 Rome FCO 07:25 08:02 2A Felszállt MA520 Frankfurt 07:45 07:54 2A Felszállt AA7277 Frankfurt 07:45 07:54 2A Felszállt EZS4238 Paris ORY 10:25 10:15 1 Felszállt MA4869 London LHR 12:45 12:55 2B Felszállt MA110 Kiev 12:50 2B MA6558 Paris CDG 12:50 2A LH3445 Frankfurt 15:35 2A SK3772 Frankfurt 15:35 2A MA614 London-LGW 16:30 2B BA4452 London-LGW 16:30 2B MA240 Beirut 23:10 2B

(A járatszám minimum 5, maximum 7 hosszú, a malév járatok esetén 'MA' karakterekkel kezdődő karaktersorozat, a várható felszállási időpont nem szerepel kötelezően, ilyenkor a várható időpont a tervezettel egyezik meg.)

Készíts olyan programot, ami a fentiek alapján elkészít egy "malev.txt", illetve egy "frankfurt.txt" elnevezésű fájlt. A "malev.txt" fájl (az alábbi példában leírt alakban) tartalmazza azon malév járatok járatszámát (az MA karakterek nélkül), felszállási idejének várható időpontját és célállomását, melyeknél a várható felszállási időpont 10:00-nál későbbi. Azaz a fenti menetrend esetén:

4869 -- 12:55 -- London LHR 110 -- 12:50 -- Kiev 6558 -- 12:50 -- Paris CDG 614 -- 16:30 -- London-LGW 240 -- 23:10 -- Beirut

A "frankfurt.txt" fájl (az alábbi példában leírt alakban) tartalmazza a Frankfurtba induló gépek járatszámát és tervezett indulási idejét. Azaz a fenti menetrend esetén:

LH3449 -- 07:05 MA520 -- 07:45 AA7277 -- 07:45 LH3445 -- 15:35 SK3772 -- 15:35

A példamegoldás letöltése

A teljes környezet letöltése (Python nyelvű megoldásokkal, és a PowerShell nyelvű példamegoldást is tartalmazza)

Colorizer

Egy fájl tartalmát karakterenként különböző színnel kiírja a képernyőre

Paraméterek: Filename és egy opcionális RandomBackground kapcsoló

Használat:

PS> .\colorizer.ps1 .\colorizer.ps1

Ekkor a program önmaga forráskódját fogja kiírni véletlenszerű színekkel.

PS> .\colorizer.ps1 .\colorizer.ps1 -RandomBackground

Ekkor a karakterek háttérszíne is véletlenszerűen választódik ki.

colorizer.zip

CSV2Oracle

Egy tab-delimited CSV formátumú szótárfájlból SQL INSERT utasításokat készít. A bemeneti fájl nevét (kiterjesztés nélkül) paraméterként kell megadni, és két oszlopot kell tartalmaznia, tabulátorjellel elválasztva. A kimeneti fájl neve <inputfájlnév>-csv2oracle-v2.sql lesz.

Megj.: A forráskódot használat előtt ajánlott testreszabni, pl. a generált SQL utasításban átírni a tábla és az oszlopok nevét a megfelelő értékekre.

csv2oracle.zip

Filter

Egy rövid példa arra, hogy hogyan lehet szűrőket (filtereket) készíteni PowerShellben.

filter.zip

Get-AverageFileSizeInFolder

Egy adott mappában található fájlok átlagméretét adja meg. A mappát paraméterként kell megadni.

Get-AverageFileSizeInFolder.zip

HaskellCodeLineCounter

A paraméterként kapott mappából rekurzívan kigyűjti a fájlokat, kiválogata a Haskell forráskódokat (*.hs), és a tartalmukban megszámolja a valódi kódsorokat. (Valódi kódsor: nem kommentjellel kezdődik (--), és nem 0 hosszú)

HaskellCodeLineCounter.zip

ipconfig output parser for Windows 7

Az ipconfig kimenetét értelmezi, és a hálózati adapterekre vonatkozó fontosabb információkat egy formon megjeleníti.

Motiváció: Vista óta az IPv6 támogatás bevezetésével az ipconfig kimenetében elszaporodtak a tunnel interface-ek, eltakarva a "valódi" interface-eket. Ez a script a tunnel interface-eket kiszűri, és a többiből is csak az IPv4 címet, valamint az alhálózati maszkot jelenítni meg, hagyományos és bináris formában.

Megj.: a program Windows 7 x64 alatt készült, de előfordulhat, hogy Vistán is működik.

ipconfig.zip

Multilanguage

Egy rövid példa .NET nyelvek PowerShellben való használatára. A program C# és Visual Basic nyelven írt kódok együttműködését mutatja be.

multilanguage.zip

openIE

COM interface segítségével megnyit egy Internet Explorer böngészőablakot, és betölti a Microsoft oldalát.

openIE.zip

PowerShellScriptRunner

Ez a program lényegében egy Visual Studio 2010 alatt készített C# kód, ami azt hivatott bemutatni, hogy .NET kódból hogyan lehet PowerShell parancsokat futtatni.

PowerShellScriptRunner.zip

RegistryDemo

A registry PowerShell alatt a Registry Provideren keresztül elérhető, és meghajtóként használható. Ennek használatát mutatja be ez a példa.

Megj.: ennél a példánál a forráskód tanulmányozása hasznosabb/érdekesebb lehet, mint maga a futtatás.

RegistryDemo.zip

services-gridview

Egy minimális példa az out-gridview használatára. Lekérdezi az ismert service-eket, és WPF Grid-ben grafikusan jeleníti meg az eredményt.

services-gridview.zip

ShortExamples

Sok néhány soros példa egy fájlba összegyűjtve, kommentekkel ellátva. Kipróbálni egyenként kimásolva érdemes őket.

ShortExamples.zip

TestFileGenerator

Egy tesztfájlt generál véletlenszámok segítségével. A generált fájl szerkezete:

"név" (az angol ABC betűiből véletlenszerűen generálva) pontszám pontszám pontszám ... pontszám "név" (az angol ABC betűiből véletlenszerűen generálva) pontszám ... pontszám "név" (az angol ABC betűiből véletlenszerűen generálva) pontszám ... pontszám ...

TestFileGenerator.zip

WMIObjects

A Get-WmiObject parancs sokoldalú lehetőségeit szemléltető, egyszerű program. Találhatunk benne példát a kimeneti sztring igazítására is.

wmiobjects.zip

ErrorAction

Az utasítások végrehajtása során sokféle hiba léphet fel. Ha egy hiba nem okozza az egész script terminálását, akkor lehetőségünk van eldönteni, hogy mit kezdjen a PowerShell ezzel a hibával. Az alábbi script egy bekért néven keres futó processt. Ha rossz nevet adunk meg neki, akkor is megnézi, hogy fut-e épp, de az így keletkező hiba nem állítja meg az alkalmazást.

ErrorAction.zip

IIS tulajdonságainak elérése

Az alábbi script többek között azt szemlélteti, hogy hogyan tudunk PowerShellben elérni más szerveralkalmazásokat. Ezenfelül példát ad a html kimenet egyszerű előállítására is.

IIS_sites_details.zip

SQL csatlakozás, DataSet használata

Egy megadott SQL szerverhez csatlakozik, ahol a megadott adatbázisban lévő táblák listáját írja ki. Jól szemlélteti, hogy hogyan lehet csatlakozni ConnectionString felhasználásával és hogy hogyan lehet egy DataSet-be betölteni az adatokat.

SQL_connect.zip

Gmail használata PowerShellen belül

A Gmail SMTP szerveréhez csatlakozva lehetőséget ad, hogy emailt küldjünk a gmail fiókunkból PowerShell-en keresztül. Indítás után bekéri az email adatait (címzett, tárgy, levél), majd egy windows-authentikációs ablakban meg kell adni a feladó Gmail postafiók nevét és jelszavát.

Gmail.zip