Microsoft Power Shell Tankonyv

Embed Size (px)

Citation preview

Sos Tibor s Szernyi Lszl

Microsoft PowerShell 1.0rendszergazdknak elmlet s gyakorlat

PS C:\> Get-Book | Where-Object {$_.Title -match "PowerShell"}

Microsoft Magyarorszg 2008

2008, Sos Tibor, Szernyi Lszl Els kiads Minden jog fenntartva. A szerzk a knyv rsa sorn trekedtek arra, hogy a lert tartalom a lehet legpontosabb s napraksz legyen. Ennek ellenre elfordulhatnak hibk, vagy bizonyos informcik elavultt vlhattak. A knyvben lert programkdokat mindenki sajt felelssgre alkalmazhatja. Javasoljuk, hogy ezeket ne les krnyezetben prbljk ki. A felhasznlsbl fakad esetleges krokrt sem a szerzk, sem a kiad nem vonhat felelssgre. Az oldalakon elfordul mrka- valamint kereskedelmi vdjegyek bejegyzjk tulajdonban llnak.

Aki msra nz, ha vlaszra vr, magt sohasem rti meg. m ha tkrkpt krdezi szntelen, a vilg lesz rthetetlenebb. Aki nem tekint az gre, nem nz r a napsugr. Aki nem tekint a fldre, az forrsra nem tall. Aki elremenne, de mindig htra nz, elvt minden tirnyt. m ha cljn kvl semmit se lt, magra lti a magnyt. Aki nem tekint az gre, jjel vakon imbolyog. Aki nem tekint a fldre, nmk annak a csillagok. /Lar Andrs: Aki/

Tartalomjegyzk1. Elmlet ............................................................................................... 11.1 Elsz.................................................................................................... 1 1.2 Kezdetek ............................................................................................... 41.2.1 A PowerShell teleptse ..................................................................................... 4 1.2.2 Indtsuk el a PowerShellt! .................................................................................. 4 1.2.3 Hello World! ....................................................................................................... 8 1.2.4 DOS parancsok vgrehajtsa .............................................................................. 8 1.2.5 Gyorsbillentyk, belltsok ............................................................................... 9 1.2.6 A TAB-billenty................................................................................................. 11 1.2.7 Promptok, beviteli sor ...................................................................................... 13 1.2.8 Parancstrtnet ............................................................................................... 14 1.2.9 A PowerShell, mint szmolgp ....................................................................... 16 1.2.10 A konzol trlse.............................................................................................. 16 1.2.11 Kis-nagybet ................................................................................................... 16

1.3 Segdprogramok ................................................................................. 181.3.1 PowerGUI, PowerGUI Script Editor .................................................................. 18 1.3.2 RegexBuddy...................................................................................................... 21 1.3.3 Reflector ........................................................................................................... 21 1.3.4 PSPlus ............................................................................................................... 22 1.3.5 MoreMotion Editor .......................................................................................... 23

1.4 Alapfogalmak ...................................................................................... 241.4.1 Architektra ..................................................................................................... 24 1.4.2 OOP alapok....................................................................................................... 26 1.4.2.1 Osztly (tpus) ........................................................................................... 26 1.4.2.2 Pldny (objektum) .................................................................................. 27 1.4.2.3 Pldnyosts............................................................................................ 27 1.4.2.4 Metdusok s vltozk ............................................................................ 27 1.4.2.5 Pldnyvltoz, pldnymetdus ............................................................ 27 1.4.2.6 Statikus vltoz, statikus metdus ........................................................... 28 1.4.2.7 Vltozk elrejtse ..................................................................................... 28 1.4.2.8 Overloaded metdusok ............................................................................ 28 1.4.2.9 rklds ................................................................................................. 29 1.4.3 Mi is az a .NET keretrendszer ........................................................................... 29 1.4.3.1 Futtatkrnyezet (Common Language Runtime, CLR) ............................. 29 1.4.3.2 Class Library (osztlyknyvtr) ................................................................. 30 1.4.3.3 Programnyelvek ....................................................................................... 30 1.4.3.4 Programfordts ....................................................................................... 31

1.4.3.5 Programfuttats ....................................................................................... 31 1.4.3.6 Assemblyk (kdkszletek) ........................................................................ 31 1.4.3.7 rtk- s referenciatpusok ...................................................................... 32 1.4.4 COM-objektumok ............................................................................................ 32 1.4.4.1 Tpusknyvtrak ....................................................................................... 33 1.4.5 Command s cmdlet ........................................................................................ 33 1.4.6 Segtsg! (Get-Help) ......................................................................................... 34 1.4.7 Ki-mit-tud (Get-Member)................................................................................. 37 1.4.8 Alias, becenv, lnv........................................................................................ 39 1.4.9 PSDrive ............................................................................................................. 41 1.4.9.1 Meghajtk ltrehozsa s trlse (New-PSDrive, Remove-PSDrive) ....... 43 1.4.10 Vltozk, konstansok ..................................................................................... 45 1.4.11 Idzjelezs, escape hasznlat ...................................................................... 49 1.4.12 Sortrs, tbbsoros kifejezsek ..................................................................... 50 1.4.13 Kifejezs- s parancsfeldolgozs .................................................................... 51 1.4.14 Utastsok lezrsa ........................................................................................ 53 1.4.15 Csvezetk (Pipeline) ..................................................................................... 54 1.4.16 Kimenet (Output) ........................................................................................... 56 1.4.17 Egyszer formzs ......................................................................................... 58 1.4.18 HTML output .................................................................................................. 63

1.5 Tpusok ................................................................................................ 651.5.1 Tpusok, tpuskezels ....................................................................................... 65 1.5.2 Szmtpusok ..................................................................................................... 68 1.5.3 Tmbk ............................................................................................................ 68 1.5.3.1 Egyszer tmbk ...................................................................................... 68 1.5.3.2 Tbbdimenzis tmbk ........................................................................... 76 1.5.3.3 Tpusos tmbk ........................................................................................ 77 1.5.4 Sztrak (hashtblk) s sztrtmbk ........................................................... 77 1.5.5 Dtumok (*datetime+, Get-Date, Set-Date) ..................................................... 81 1.5.5.1 Idtartam szmts (New-TimeSpan) ....................................................... 83 1.5.6 Automatikus tpuskonverzi ............................................................................ 84 1.5.7 Tpuskonverzi ................................................................................................. 85 1.5.8 .NET tpusok, statikus tagok ............................................................................. 88 1.5.9 A .NET osztlyok feldertse ............................................................................ 89 1.5.10 Objektumok testre szabsa, kiegsztse ...................................................... 95 1.5.11 Osztlyok (tpusok) testre szabsa ................................................................. 98 1.5.11.1 PSBase, PSAdapted, PSExtended ......................................................... 100 1.5.12 Objektumok mentse, visszatltse ............................................................ 105

1.6 Opertorok ........................................................................................ 1071.6.1 Aritmetikai opertorok .................................................................................. 107 1.6.1.1 sszeads ............................................................................................... 107

1.6.1.2 Tbbszrzs .......................................................................................... 109 1.6.1.3 Oszts, maradkos oszts....................................................................... 110 1.6.2 rtkads........................................................................................................ 111 1.6.3 sszehasonlt opertorok ............................................................................ 113 1.6.4 Tartalmaz (-contains, -notcontains) ............................................................... 116 1.6.5 Dzsker-mintk (-like) .................................................................................... 116 1.6.6 Regex (-match, -replace) ................................................................................ 119 1.6.6.1 Van-e benne vagy nincs? ........................................................................ 119 1.6.6.2 Van benne, de mi? .................................................................................. 122 1.6.6.3 A moh regex ......................................................................................... 122 1.6.6.4 Escape a Regex-ben ................................................................................ 123 1.6.6.5 Tudjuk, hogy mi, de hol van? .................................................................. 124 1.6.6.6 Tekintsnk elre s htra a mintban .................................................... 128 1.6.6.7 A mintm visszakszn........................................................................... 130 1.6.6.8 Vltozatok a keressre ........................................................................... 131 1.6.6.9 Tudjuk, hogy mi, de hnyszor? ............................................................... 134 1.6.6.10 Csere ..................................................................................................... 137 1.6.7 Logikai s bitszint opertorok ...................................................................... 138 1.6.8 Tpusvizsglat, tpuskonverzi (-is, -as) .......................................................... 139 1.6.9 Egytag opertorok (+, -, ++, --, *tpus+) ......................................................... 140 1.6.10 Csoportost opertorok .............................................................................. 141 1.6.10.1 Gmbly zrjel: () ............................................................................. 141 1.6.10.2 Dollros gmbly zrjel: $() ............................................................. 142 1.6.10.3 Kukacos gmbly zrjel: @() ............................................................ 143 1.6.10.4 Kapcsos zrjel: ,- (bajusz) ................................................................... 144 1.6.10.5 Szgletes zrjel: *+ .............................................................................. 145 1.6.11 Tmbopertor: , ........................................................................................ 145 1.6.12 Tartomny-opertor: .. ............................................................................. 146 1.6.13 Tulajdonsg, metdus s statikus metdus opertora: . .......................... 146 1.6.14 Vgrehajts .................................................................................................. 147 1.6.15 Formz opertor ........................................................................................ 148 1.6.16 tirnyts: >, >> .................................................................................... 150

1.7 Vezrl utastsok ..............................................................................1521.7.1 IF/ELSEIF/ELSE ................................................................................................ 152 1.7.2 WHILE, DO-WHILE .......................................................................................... 152 1.7.3 FOR ................................................................................................................. 153 1.7.4 FOREACH ........................................................................................................ 153 1.7.4.1 $foreach vltoz ..................................................................................... 154 1.7.5 ForEach-Object cmdlet ................................................................................... 156 1.7.6 Where-Object cmdlet ..................................................................................... 157 1.7.7 Cmkk, trs (Break), folytats (Continue) ................................................... 158 1.7.8 SWITCH........................................................................................................... 159

1.7.8.1 wildcard ................................................................................................ 161 1.7.8.2 regex .................................................................................................... 162 1.7.8.3 $switch vltoz ...................................................................................... 162

1.8 Fggvnyek ........................................................................................ 1641.8.1 Az els fggvnyem ....................................................................................... 164 1.8.2 Paramterek .................................................................................................. 164 1.8.2.1 Paramterinicializls ............................................................................ 165 1.8.2.2 Tpusos paramterek ............................................................................. 166 1.8.2.3 Hibajelzs ............................................................................................... 167 1.8.2.4 Vltoz szm paramter ...................................................................... 168 1.8.2.5 Hivatkozs paramterekre ..................................................................... 169 1.8.2.6 Kapcsol paramter (*switch+) ............................................................... 170 1.8.2.7 Paramter-definci a fggvnytrzsben (param) ................................. 171 1.8.2.8 Paramterek, vltozk ellenrzse (validls) ....................................... 172 1.8.3 Vltozk lthatsga (scope) ......................................................................... 175 1.8.4 Fggvnyek lthatsga, dotsourcing ........................................................ 177 1.8.5 Referencilis hivatkozs paramterekre (*ref+) ............................................. 179 1.8.6 Kilps a fggvnybl (return) ....................................................................... 180 1.8.7 Pipe kezelse, filter ........................................................................................ 181 1.8.8 Szkriptblokkok ................................................................................................ 183 1.8.8.1 Anonim fggvnyek ............................................................................... 184 1.8.9 Fggvnyek trlse, mdostsa ................................................................... 185 1.8.10 Gyri fggvnyek ......................................................................................... 188

1.9 Szkriptek ............................................................................................ 1901.9.1 Szkriptek engedlyezse s indtsa .............................................................. 190 1.9.2 Vltozk kiszippantsa a szkriptekbl (dot sourcing) .................................... 193 1.9.3 Paramterek tvtele s a szkript ltal visszaadott rtk ............................. 194 1.9.4 Szkriptek rsa a gyakorlatban ....................................................................... 196 1.9.4.1 PowerGUI Script Editor .......................................................................... 196 1.9.4.2 Megjegyzsek, kommentezs (#) ........................................................... 197 1.9.5 Adatbekrs (Read-Host) ............................................................................... 197 1.9.6 Szkriptek digitlis alrsa .............................................................................. 198 1.9.7 Vgrehajtsi preferencia ................................................................................ 204

1.10 Fontosabb cmdletek ......................................................................... 2061.10.1 Csvezetk feldolgozsa (Foreach-Object) jra ........................................ 206 1.10.2 A csvezetk elgaztatsa (Tee-Object) ...................................................... 207 1.10.3 Csoportosts (Group-Object) ...................................................................... 208 1.10.4 Objektumok talaktsa (Select-Object) ...................................................... 210 1.10.5 Rendezs (Sort-Object) ................................................................................ 213 1.10.6 Mg egyszer format-table............................................................................ 215 1.10.7 Gyjtemnyek sszehasonltsa (Compare-Object) .................................... 215

1.10.8 Klnbz objektumok (Get-Unique) .......................................................... 217 1.10.9 Szmlls (Measure-Object) ........................................................................ 219 1.10.10 Nyomtats (Out-Printer) ............................................................................ 220 1.10.11 Kirs fjlba (Out-File, Export-) ................................................................... 220 1.10.12 talakts szvegg (Out-String) ................................................................ 224 1.10.13 Kimenet trlse (Out-Null) ......................................................................... 225

1.11 sszefoglal: PowerShell programozsi stlus ....................................226

2.

Gyakorlat ................................................................................... 2282.1 PowerShell krnyezet .........................................................................2282.1.1 Szkriptknyvtrak, futtatsi informcik ($myinvocation) ............................ 228 2.1.1.1 A $MyInvocation felhasznlsa parancssor-elemzsre .......................... 232 2.1.2 Krnyezeti vltozk (env:) .............................................................................. 233 2.1.3 Lpjnk kapcsolatba a konzolablakkal ($host) ............................................... 235 2.1.4 Prompt belltsa ........................................................................................... 238 2.1.5 Snapin-ek........................................................................................................ 238 2.1.6 Konzolfjl ........................................................................................................ 241 2.1.7 Profilok ........................................................................................................... 242 2.1.8 rktsk meg munknkat (start-transcript) ................................................. 243 2.1.9 Stopperoljuk a futsi idt s vrakozzunk (measure-command, start-sleep) 244 2.1.10 Elrehalads jelzse (write-progress) .......................................................... 245

2.2 Hibakezels ........................................................................................2462.2.1 Megszakt s nem megszakt hibk ............................................................ 246 2.2.2 Hibajelzs kiolvassa ($error) ........................................................................ 249 2.2.3 Hibakezels globlis paramterei .................................................................. 251 2.2.4 Hibakezels sajt fggvnyeinkben (trap) ..................................................... 252 2.2.4.1 Tbbszint csapda .................................................................................. 257 2.2.4.2 Dobom s elkapom................................................................................. 259 2.2.5 Nem megszakt hibk kezelse fggvnyeinkben ........................................ 261 2.2.6 Hibakeress .................................................................................................... 262 2.2.6.1 Sttusjelzs (write-verbose, write-debug) ............................................. 263 2.2.6.2 Lpsenknti vgrehajts s szigor vltozkezels (set-psdebug) ...... 264 2.2.6.3 ssunk mg mlyebbre (Trace-Command) ............................................ 266 2.2.7 A PowerShell esemnynaplja ....................................................................... 270

2.3 Fjlkezels ..........................................................................................2712.3.1 Fjl s knyvtr ltrehozsa (new-item), ellenrzse (test-path) .................. 271 2.3.2 Rejtett fjlok ................................................................................................... 272 2.3.3 Szvegfjlok feldolgozsa (Get-Content, Select-String) ................................. 273 2.3.4 Sortrs kezelse szvegfjlokban ................................................................ 276 2.3.5 Fjl hozzfrsi listja (get-acl, set-acl) .......................................................... 277

2.3.5.1 Fjlok tulajdonosai ................................................................................. 279 2.3.6 Ideiglenes fjlok ltrehozsa.......................................................................... 280 2.3.7 XML fjlok kezelse ........................................................................................ 280 2.3.8 Megosztsok s webmappk elrse ............................................................ 282

2.4 Az Esemnynapl feldolgozsa (Get-Eventlog) .................................... 284 2.5 Registry kezelse ................................................................................ 2882.5.1 Olvass a registrybl ...................................................................................... 288 2.5.2 Registry elemek ltrehozsa, mdostsa ..................................................... 291 2.5.3 Registry elemek hozzfrsi listjnak kiolvassa ......................................... 292

2.6 WMI .................................................................................................. 2932.6.1 A WMI ttekintse ......................................................................................... 293 2.6.2 A WMI felptse ........................................................................................... 294 2.6.3 A WMI objektummodellje .............................................................................. 295 2.6.4 Smk ............................................................................................................ 296 2.6.5 Nvterek ........................................................................................................ 297 2.6.6 A legfontosabb providerek ............................................................................ 299 2.6.7 WMI objektumok elrse PowerShell-bl ..................................................... 299 2.6.8 WMI objektumok metdusainak meghvsa ................................................. 302 2.6.9 Fontosabb WMI osztlyok ............................................................................. 306

2.7 Rendszerfolyamatok s szolgltatsok ................................................ 3092.7.1.1 Szolgltatsok Startup tulajdonsga ...................................................... 312

2.8 Teljestmny-monitorozs .................................................................. 315 2.9 Felhasznl-menedzsment, Active Directory ....................................... 3162.9.1 Mi is az ADSI? ................................................................................................. 316 2.9.2 ADSI providerek ............................................................................................. 316 2.9.3 Az ADSI gyorsttr ........................................................................................ 317 2.9.4 Active Directory informcik lekrdezse ..................................................... 317 2.9.5 Csatlakozs az Active Directory-hoz .............................................................. 319 2.9.6 AD objektumok ltrehozsa........................................................................... 320 2.9.7 AD objektumok tulajdonsgainak kiolvassa, mdostsa ............................ 321 2.9.7.1 Munka tbbrtk (multivalued) attribtumokkal ................................ 326 2.9.7.2 Specilis tulajdonsgok kezelse ........................................................... 328 2.9.8 Jelsz megvltoztatsa .................................................................................. 329 2.9.9 Csoportok kezelse ........................................................................................ 329 2.9.10 Keress az AD-ben ....................................................................................... 330 2.9.10.1 Keress id tpus adatokra ................................................................. 333 2.9.10.2 Keress bitekre..................................................................................... 334 2.9.11 Objektumok trlse ..................................................................................... 335 2.9.12 AD objektumok hozzfrsi listjnak kezelse .......................................... 335

2.9.13 sszetett feladat ADSI mveletekkel ........................................................... 338

2.10 .NET Framework hasznos osztlyai ....................................................3402.10.1 Levlklds ................................................................................................... 340 2.10.2 Bngszs ..................................................................................................... 340 2.10.3 Felhasznli informcik.............................................................................. 342 2.10.4 DNS adatok lekrdezse............................................................................... 342

2.11 SQL adatelrs..................................................................................344 2.12 COM objektumok kezelse................................................................3472.12.1 A Windows shell kezelse ............................................................................ 347 2.12.2 WScript osztly hasznlata ........................................................................... 348 2.12.3 Alkalmazsok kezelse ................................................................................. 350

3.

Bvtmnyek ............................................................................... 3523.1 Quest ActiveRoles Management Shell for Active Directory ................352 3.2 PCX PowerShell Community Extensions ............................................357 3.3 Exchange Server 2007 .........................................................................3623.3.1 Te j g! Csak nem egy jabb parancssori krnyezet? .................................. 362 3.3.2 Az Exchange cmdletek feltrkpezse ........................................................... 366 3.3.3 Help szerkezete .............................................................................................. 369 3.3.4 Felhasznl- s csoportkezels ...................................................................... 370 3.3.5 Get s Set ....................................................................................................... 372 3.3.6 j paramterfajta: Identity ............................................................................ 374 3.3.7 Filter paramter ............................................................................................. 376

3.4 Adatok vizualizlsa, PowerGadgets ...................................................379 3.5 Kitekints a PowerShell 2.0-ra.............................................................383

4. 5.

Hasznos linkek ............................................................................ 385 Trgymutat............................................................................... 389

Elmlet

1. Elmlet1.1 ElszHa egyetlen mondatban kellene megfogalmaznunk, hogy mi is a PowerShell amirl ez a knyv szl -, akkor azt mondhatnnk, hogy a PowerShell egy teljesen objektumorientlt, a .NET keretrendszerre pl parancsfeldolgoz- s szkriptkrnyezet, ami gykeresen j alapokra helyezi (s fogja helyezni) a Windows opercis rendszerekkel s kiszolgloldali alkalmazsokkal kapcsolatos felgyeleti feladataink elvgzst. A Windows rendszerek parancssori felletnek viszonylagos gyengesge trtnelmi okokra vezethet vissza. A Windows fejlesztsnek f vonala a kezdetektl fogva a grafikus felhasznli fellet tkletestse volt, a parancssor sokig csak mint kiegszt eszkz szerepelt, gy a lehetsgek tbb-kevsb korltozottak voltak. A Microsoft clja alapveten az, hogy minden parancs vagy lista, ami az MMC konzolon vagy egy webes adminisztrcis felletrl elrhet, illetve amit az adott szerveralkalmazs kiajnl magbl automatizcihoz, vagy sajt felgyelethez, az Windows PowerShell parancsok vagy providerek formjban is rendelkezsre lljon. gy a rendszergazda eldntheti, hogy a grafikus, vagy a parancssoros interfszt hasznlja feladatai elvgzshez. A grafikus fellet nyilvn sokak szmra egyszerbb, azonban a parancssor hasznlatval messze tbb lehetsgnk addik; pldul ugyanazokkal az eszkzkkel barangolhatunk a registry, a fjlrendszer, a tanstvnytr, vagy ppen az Exchange mailboxok kztt, s egy nagyon korrektl sszerakott, tpusos, .NET-alap szkriptnyelvvel dolgozhatunk az ott tallt adatokkal. Ha egy mveletsort egyetlen gpen csak egyetlen egyszer kell vgrehajtanunk, akkor a grafikus fellet a logikus vlaszts, ebben az esetben a parancssor hasznlata, vagy a megfelel szkript megrsa csupn idignyes (br szrakoztat) hobbinak tekinthet. Egszen ms a helyzet azonban, ha az adott mveleteket minden nap el kellene vgeznnk (vagy esetleg 300 gpen kell minden nap elvgeznnk). Akinek mg gy is knyelmesebb a grafikus fellet, annak vljon egszsgre az egerszs. Az Exchange Server 2007-ben br nagyon sok funkci elrhet a hozz tartoz j MMC konzolrl, azonban nem mindent tudunk belltani onnan. J nhny, ritkbban hasznlatos bellts csak PowerShell parancsokkal vgezhet s. s ha automatizlni szeretnnk az Exchange Server 2007 konfigurlst, akkor ezt mindenkppen a Windows PowerShell alapokra pl Exchange Management Shellel tehetjk meg. Az Exchange 2007, nagyon hasonlan az SQL Server 2005-hz mr arra is kpes, hogy ha a grafikus felleten mdostunk valamit, azt szkriptknt is visszaadja neknk. Mgpedig egy olyan PowerShell szkript kpben, amit azonnal tudunk az j parancssorban, vagy automatizlshoz hasznlni.

1

ElszAz pedig, hogy a PowerShell szinte teljesen .NET-alap, mg egy rdekessget mutat: az eddig szinte kizrlag programozknak szl osztlyknyvtrak vgre elrhetek egyszerbb formban a rendszergazdk szmra is, gy a szerverszoftverek testre szabshoz s automatizlshoz kevesebb alkalommal lesz szksg a fejleszt beavatkozsra. Ezzel egy idben pedig a rendszergazdk is kzelebb kerlhetnek a .NET alap programozshoz. Aki ltja a jvt, az tudhatja, hogy a PowerShell mindent visz. Elbb-utbb mindenkinek ugyangy meg kell tanulnia, mint annak idejn a DOS-t egyszeren nincs nlkle let a Windows-vilgban.

Szernyi Lszl

A knyvet ketten rtuk, Sos Tibor s Szernyi Lszl. Az egyes alfejezeteket vagy egyiknk, vagy msikunk, ez indokolja a knyvben alkalmazott egyes szm els szemly alkalmazst. Lszl leginkbb a 1.2, 1.4, 1.10 s a gyakorlati rsz egyes alfejezeteibe segtett be. Annak ellenre, hogy ketten rtuk, bzom benne, hogy az olvassban s a megrtben ez nem okoz zavart, prbltam azrt szerves egssz sszegyrni a szveget. A knyv rst elszr tanfolyami jegyzetknt kezdtem el, majd annyi dolog tolult fel bennem PowerShell tmban, hogy egyre csak hzott az anyag, gy kt hnap utn megrleldtt bennem, hogy knyvv kellene talaktani. Ennek ellenre vgig az lebegett a szemem eltt, hogy ez olyan knyv legyen, amely segtsgvel meg lehet tanulni a PowerShell hasznlatt. Prbltam azokat a rszeket rszletesebben lerni, amelyek anno nekem nehezebben voltak rthetek. Termszetesen pusztn a knyv elolvassa mg nem elegend ahhoz, hogy profi PowerShell programozk legynk, sok gyakorlsra is szksg van. A Microsoft Script Center weboldaln telente szoktak hirdetni Winter Scripting Games nven szkriptelsi versenyt, javaslom a tisztelt olvasnak, hogy nzze meg milyen feladatok voltak az elmlt vekben, prblja meg megoldani azokat, s javaslom, hogy akr nevezzen is be a kvetkez vetlkedbe, nagyon sokat lehet ebbl tanulni! Ha valaki idt szeretne nyerni, akkor javaslok egy - ltalam tartott - tanfolyam elvgzst, amely ennek a knyvnek az anyagra pl. A ngynapos tanfolyam sorn az elmlet elmagyarzsa mellett lehetsg van gyakorlsra. A kiadott feladatokat megbeszljk, megnzzk, hogy a klnbz megoldsi javaslatok kzl vajon melyik tanfolyami rsztvev megoldsa a legelegnsabb, leggyesebb. Ezt a fajta tanulst a knyv nmagban nem helyettesti. Ezen a ngy napon hozzvetlegesen 2 hnap nll ismeretelsajttsnak idejt lehet megsprolni. A PowerShell szmomra szrakozs, szellemi jtk is. Bzom benne, hogy a kedves olvas szmra is sikerl ezt az oldalt is megmutatni, s lvezettel prblja ki mindenki a pldaszkripteket s akr el is jtszadozik velk, tovbb is fejleszti azokat.

2

ElmletA PowerShell 2.0 mr kszlben van. Terveim szerint a megjelense utn nem sokkal aktualizlom ezt a knyvet, gy a 2. kiads mr az jdonsgokat is tartalmazni fogja. Szvesen fogadom a knyvvel kapcsolatos visszajelzseket! Akr valami elgpelst, vagy nehezen rthet pldt tallnak, vagy javasolnnak valamit, ami mg illene egy ilyen jelleg knyvbe, krem, rjk meg! Cmem: [email protected] .

Sos Tibor

3

Kezdetek

1.2 Kezdetek1.2.1 A PowerShell teleptseA PowerShell 1.0 telepthet Windows XP SP2, Windows Server 2003 SP1 s ezeknl jabb opercis rendszerre. A telepts elfelttele a .NET Framework 2.0 meglte a gpen. Mind a PowerShell, mind a .NET Framework letlthet a Microsoft weboldalrl. A PowerShell teleptkszleteihez legegyszerbben a http://www.microsoft.com/powershell cmen megjelen Download szekcibl tudunk eljutni. Az indokolja a tbbes szmot, hogy minden opercis rendszer tpushoz s processzor-platformhoz kln teleptkszlet van, gy fontos, hogy a megfelelt tltsk le s teleptsk. A PowerShell-t a Start men Windows PowerShell 1.0 csoportjban tallhat Windows PowerShell parancsikon segtsgvel, vagy kzvetlenl a powershell.exe meghvsval indthatjuk. A 64 bites Windows-okon kt PowerShell ikonunk is lesz, egy 64 bites s egy 32 bites parancssori krnyezet indtsra:

1. bra PowerShell programcsoport ikonjai (64 bites)

A programcsoportban a PowerShell dokumentcijnak ikonjai is megtallhatk.

1.2.2 Indtsuk el a PowerShellt!Indts utn a rgi, megszokott Parancssorhoz (cmd.exe) hasonl fellet jelenik meg. Amint az albbi brn is lthat, ksrteties a hasonlsg, nem lesz itt baj, gondosan tartsuk magunktl tvol a dokumentcit s prblkozzunk btran.

4

Elmlet

2. bra, A cmd.exe s a PowerShell

Kezdetnek prbljuk ki teht a megszokott parancsokat, vajon mit szl hozzjuk az j shell.PS C:\> dir Directory: Microsoft.PowerShell.Core\FileSystem::C:\ Mode ---d---d---d---d-r-d---d----a---a--LastWriteTime ------------2007.06.10. 12:41 2007.06.13. 21:30 2003.10.25. 18:59 2007.06.04. 20:36 2006.09.13. 18:10 2007.05.31. 19:50 2003.08.15. 19:35 2003.08.15. 19:35 Length Name ------ ---Config.Msi Documents and Settings Inetpub Program Files temp WINDOWS 0 AUTOEXEC.BAT 0 CONFIG.SYS

Amint lthat, nem trtnt semmi meglep, kaptunk egy mappa- s fjllistt, nagyjbl a megszokott mdon. Eddig rendben, a nehezn tl is vagyunk, ez is csak egy parancssor. Prblkozzunk valami nehezebbel, rjuk be mondjuk a kvetkezt:PS C:\> dir /s Get-ChildItem : Cannot find path 'C:\s' because it does not exist. At line:1 char:4 + dir Get-ChildItem -Include *.txt -Recurse

1

A help s a man nem alias, hanem fggvny, de ennek a mi szempontunkbl most nincs jelentsge.

6

Elmlet A HKLM/Software g kilistzsa a registrybl.

PS C:\> Get-ChildItem registry::HKLM/Software

dir *.exe

PS C:\> Get-ChildItem * -i *.exe

cd q:

PS C:\> Set-Location q:

Jelenlegi pozci elmentse .

2

PS C:\> Push-Location

tlls a HKEY_CURRENT_USER gra a registryben.

PS C:\> Set-Location HKCU:

Visszaugrs egy korbbi elmentett pozcira.

PS C:\> Pop-Location

tlls a tanstvnytr meghajtra.

PS C:\> Set-Location Cert:

Azrt volt nhny elg furcsa klsej parancs, igaz? Tanstvnytr meghajt!? Mi lesz mg itt? Ksrletezznk tovbb! Ha mr ilyen szpen tudjuk hasznlni a nem ltez parancsokat, prbljunk ki valami olyat, ami tnyleg biztosan nem ltezhet:PS C:\> 1 1

Semmi hibazenet, a PowerShell egyszeren visszarta a szmot a konzolra. A PowerShell ablakot bezrni az Exit paranccsal lehet, de ez nem PowerShell parancs, nem is alias, a help sem ad semmi tmpontot.

2

Ahogyan a nv sugallja, tbb pozci is elmenthet egyms tetejre, vagyis egy verembe. A Pop-Location mindig a legfell lvre tr vissza, majd eldobja azt.

7

Kezdetek

1.2.3 Hello World!Az elzekben a PowerShell sajt parancsaival s DOS-os lnevekkel ksrleteztnk, most kezd kezdjnk el alkotni, sajt programot rni! Bjarne Stroustrup ta, azt hiszem, minden programozssal foglalkoz knyv azzal kezddik, hogy olyan programot runk, amelyik kirja a kpernyre, hogy Hello world!. Nzzk meg, hogy ez hogyan megy PowerShellben:

3. bra Els PowerShell parancsom

Nagyon egyszer, idzjelek kzt berjuk a szveget, Enter, s mr ki is rta. Ennl egyszerbben nem is lehetne ezt!

1.2.4 DOS parancsok vgrehajtsaLttuk, hogy a Dir parancs lefutott, de knny neki, hiszen a Dir egy PowerShell parancs lnven. De vajon a tbbi DOS paranccsal mi trtnik? Azokkal is nyugodtan prblkozzunk! Pldul prbljuk ki az IPConfig parancsot:

4. bra IPConfig a PowerShell ablakban

8

ElmletEz is lefutott, az ipconfig ugyangy mkdik, mint a DOS ablakban. Ehhez hasonlan a tbbi DOS parancsot is nyugodtan kiprblhatjuk, azaz akr teljes egszben ttrhetnk a PowerShell krnyezet hasznlatra, akr a nem PowerShell parancsok futtatsval is.

1.2.5 Gyorsbillentyk, belltsokNagyban meggyorstja munknkat, ha ismerjk azokat a gyorsbillentyket, amelyek elrhetek a PowerShell ablakban: TAB Shift + TAB F1 F2 F3 vagy F4 F5 vagy F6 F7 F8 F9 Jobbkattints Egrrel kijell + Enter ESC Automatikus kiegszts, tovbbi TAB tovbbi tallatokat ad Visszalp az elz tallatra 1 karakter a trtnet-trbl Bert karakterig msol Elz parancs a trtnet-trbl Kurzortl az adott karakterig trl Lpked vissza a trtnet-trbl hatstalan Trtnettrat megjelenti Parancstrtnet, de csak a mr begpelt szvegre illeszkedeket Bekri a trtnettr adott elemnek szmt s futtatja Beilleszts Msols Karaktert lpked, res sorban a parancstrtnet-trbl hv el karaktereket Karaktert lpked Trli az aktulis parancssort

Tovbb gyorstja a munknkat, ha a PowerShell ablak nhny belltsra is odafigyelnk. Ha jobb egrgombbal kattintunk az ablak bal fels sarkban lev PowerShell ikonra ( ), akkor a kvetkez men jelenik meg:

5. bra A PowerShell ablak menje

9

KezdetekItt minket a Properties menpont rdekel, kattintsunk r. A megjelen prbeszdpanelben van nhny fontos, munknkat segt belltsi lehetsg: Az Options fln a QuickEdit Mode fontos, hogy be legyen kapcsolva. Ennek birtokban tudjuk az egrrel kijellni a konzolon megjelen szvegeket s Enter letsvel a vglapra helyezni. Szintn ez kell ahhoz, hogy a vglapra valahonnan kimsolt szveget a jobb egrgombbal beilleszthessk a kurzor pozcijtl kezdden.

6. bra Options fl

A Font fln llthatunk be az ignyeinknek s szemnknek esetleg jobban megfelel bettpust s mretet. A Layout fln lehet optimlisabb ablakmretet belltani. Ez fleg az ablak szlessge szempontjbl fontos, mert majd ltni fogjuk, hogy a PowerShell parancsok kimenete nagyon gyakran tblzat jelleg, s annak jobb, ha minl szlesebb ablakban tudjuk megjelenteni.

7. bra Az ablak mretnek belltsa

Jelen knyvbe msolt konzoltartalmak miatt n az ablakmretemet levettem 76 karakterre, mert ez pont mg megfelel fontmrettel beilleszthet a knyv lapjaira, de igazi

10

Elmletmunkban, amikor j nagy felbonts monitort hasznlunk, akkor ezt rdemes akr 150 karakterre megnvelni. Szintn praktikus, ha a lthat ablak szlessge s a mgtte lev Screen Buffer szlessge egyforma, mert akkor nem lesz vzszintes grdt svunk, ami j, ha nincs. Ezzel szemben a fggleges puffer-mret lehet j nagy, hogy hosszabb listk is gond nlkl teljes terjedelmkkel kifrjenek, s fggleges grdtssel megtekinthetek legyenek. Az utols fl a sznek belltsra val. Alaphelyzetben mlykk alapon fehr betkkel nylik meg a PowerShell ablak. Ha valaki knyvet r, s a kpernykpek nyomtatsra kerlnek, akkor rdemes festkkmls cljbl inkbb fehr alapon fekete betket hasznlni. Ha testre szabtuk az ablakot, akkor a prbeszdpanel bezrskor rkrdez a fellet, hogy ezeket a belltsok csak az adott ablakra vonatkozzanak, vagy legkzelebb is viszont akarjuk ltni a vltoztatsainkat, ha jra megnyitjuk a Start menbl a PowerShell ablakot. rdemes ez utbbi opcival elmenteni vltoztatsainkat kiprbls utn.

1.2.6 A TAB-billentyAz egyik legtbbet hasznlt gyorsbillenty a TAB-billenty, amit rdemes kicsit rszletesebben is trgyalni, mivel ez rengeteg flsleges gpelstl mentheti meg a lustbb (ez hatrozottan pozitv tulajdonsg) szkriptelket. A PowerShell TAB-billentyje annyira sokrten hasznlhat, hogy akr olyan informciforrsknt is tekinthetnk r, ami gyorsan, knnyen elrhet s mindig kznl van. A TAB hasznlata nem igazi jdonsg, nyilvn sokan hasznltk a cmd.exe-be ptett vltozatt, de a PowerShell-ben szmos j kpessggel is tallkozhatunk. Mi a teend pldul, ha t akarunk vltani a C:\Documents and Settings mappra? Termszetesen begpelhetjk a teljes parancsot:PS C:\> Set-Location "c:\documents and settings"

Nem is olyan sok ez. Akinek mgis, az csak ennyit rjon:PS C:\> Set-Location c:\d

Ha a c: meghajt gykerben nincs ms d betvel kezdd mappa, akkor kszen is vagyunk, a shell kiegsztette a parancsot, mg az idzjeleket is begpelte helyettnk. Ha tbb mappa is kezddik d-vel akkor sincs nagy baj, a TAB-billenty szorgalmas nyomkodsval elbb-utbb eljutunk a megfelel eredmnyig. Mg ez is tl sok? Prblkozzunk tovbb! A PowerShell nemcsak a mappa s fjlneveket, hanem a cmdletek nevt is kitallja helyettnk:PS C:\> Set-L c:\d

Mi trtnik vajon, ha csak ezt gpeljk be:

11

KezdetekPS C:\> Set-

Bizony, a TAB-billenty nyomkodsval vgiglpkednk az sszes Set- parancson, gy akkor is knnyen kivlaszthatjuk a megfelelt, ha a pontos nv ppen nem jut esznkbe. A Shift+TAB-bal vissza tudunk lpni az elz tallatra, ha tl gyorsan nyomkodva esetleg tovbb lptnk, mint kellett volna. Mi a helyzet a cmdletek paramtereivel? Gpeljk be a kvetkezt:PS C:\> Get-ChildItem -

Taln mr nem is meglep, hogy a lehetsges paramterek listjn is vgiglpkedhetnk, hogy a megfelelt knnyebben kivlaszthassuk kzlk. A paramterek megadsval kapcsolatban itt emltnk meg egy msik lehetsget is (br nem kell hozz TAB). Egyszeren annyi a teendnk, hogy egyltaln nem adunk meg paramtert, mivel ebben az esetben a parancs indtsa eltt a PowerShell szp sorban bekri a ktelez paramtereket:PS C:\> New-Alias Supply values for the following parameters: Name: ga Value: Get-Alias

Hamarosan rszletesen megismerkednk a PowerShell vltozk rejtelmeivel s az objektumok hasznlatval, most csak egy kis elzetes kvetkezik a TAB-billenty kapcsn. Ha a PowerShell munkamenetben sajt vltozkat definilunk, a TAB ezek nevnek kiegsztsre is kpes, amint az albbi pldn lthat:PS C:\> $ezegynagyonhosszunevuvaltozo = 1 PS C:\> $ez

gyes! s mi a helyzet a .NET vagy COM-objektumok tulajdonsgaival s metdusaival? A TAB-billenty ebben az esetben is kszsgesen segt:PS PS PS PS C:\> C:\> C:\> C:\> $s = "hell" $s. $excel = new-object -comobject excel.application $excel.

Aki mg arra is kvncsi, hogy ezt a sok okossgot mi vgzi el helyettnk, adja ki a kvetkez kt parancsot (termszetesen a TAB-billenty sr nyomkodsval):PS C:\> Set-Location function: PS Function:\> (get-item tabexpansion).definition

A kpernyn a PowerShell beptett TabExpansion nev fggvnynek kdja jelenik meg; ez fut le a TAB-billenty minden egyes letsekor. A kd most mg taln egy

12

Elmletkicsit ijesztnek tnhet, de hamarosan mindenki folykonyan fog olvasni PowerShell-l. A kd azonban nemcsak olvasgatsra j, meg is vltoztathatjuk azt, st akr egy teljesen j, sajt fggvnyt is rhatunk a gyri darab helyett (a fggvnyekrl ksbb termszetesen mg lesz sz).

1.2.7 Promptok, beviteli sorLthat, hogy a PowerShell is a parancssorok elejn, amikor tlnk vr valamilyen adatbevitelt, akkor egy kis jelz karaktersorozatot, u.n. promptot r ki. Ez alaphelyzetben gy nz ki:PS alaphelyzet szerinti knytr elrsi tja\>

Az alaphelyzet szerinti knyvtr nagy valsznsggel a My Documents knyvtrra mutat. Ez a prompt testre szabhat. Itt ebben a knyvben sok helyen ilyen mdostott prompt lthat a pldimnl:[1] PS I:\>

A PS el biggyesztettem egy nvekv szmot szgletes zrjelek kztt, hogy jobban tudjak hivatkozni az egyes sorokra a magyarz szvegben. A prompt tbbszint, viszont csak 1 szint mlysgig jelzi a >> jellel az alapszinttl eltr mlysget, ennl mlyebb szintekre nincs kln specilis prompt:

8. bra Tbbszint prompt

Ha rzi, hogy kell mg folytatdnia a sornak, >> lesz a prompt. Ha mr ki akarunk szllni a mlyebb szint promptbl, akkor azt egy res sorban lettt Enterrel tehetjk meg. Ha egy hosszabb sort inkbb kln sorba szeretnnk tenni, a visszafeleaposztrf (` AltGr 7) hasznlatos:

13

Kezdetek

9. bra Sortrs Escape (`) karakter utn

Ez az u.n. Escape karakter, ami hatstalantja a kvetkez specilis karakter (itt pl. az Enter) hatst. Amgy nyugodtan folytatdhat a parancssorunk a kvetkez sorban, ha tl hossz. Ha tbb utastst szeretnnk egy sorba berni, akkor a ; karakterrel tudjuk azokat elvlasztani.[1] PS I:\>"Els utasts"; 1+3; "Vge" Els utasts 4 Vge

1.2.8 ParancstrtnetA PowerShell ablak megjegyzi a korbban begpelt parancssorainkat. Ezt a parancstrtnet-trat az F7 billentyvel tudjuk megjelenteni. Vigyzat! Ktfajta trtnetsorszmozs van:

10. bra A PowerShell parancstrtnet-tr

Az F7-re megjelen trtnettrban minden tnyleges sor (alpromptok is) kln vannak nyilvntartva. Van azonban egy PowerShell cmdletnk is, a get-history, amiben

14

Elmletfpromptonknt kapunk j sorszmot. Radsul a trtnettrbl elhvott parancsok esetben a sorszmok msknt viselkednek a ktfajta elhvs sorn. Az albbi bra azt demonstrlja, hogy elhvtam a 3. parancsot a trtnettrbl. Az F7-es trtnettr ezek utn ezt a parancsot nem jelenti meg jra, azt mutatja, hogy ezt a 3. parancsot egyszer hajtottam vgre. Ezzel szemben a get-history kirta, mint 5. vgrehajtst:

11. bra A megismtelt parancsok nem jelennek meg a trtnettrban

A parancstrtnetbl Enterrel lehet vgrehajtatni a kijellt korbbi parancsot, de gyakran arra van szksgnk, hogy egy rgebbi parancsot kicsit mdostva hajtsuk jra vgre. Ekkor ne Entert, hanem a jobbnylt nyomjuk meg.

15

Kezdetek

1.2.9 A PowerShell, mint szmolgpA PowerShell alaphelyzetben szmolgpknt is mkdik:

12. bra Szmolsi mveletek a PowerShell ablakban

Ltszik a fenti brn, hogy tmogatja az alapmveleteket s a leggyakoribb szmtstechnikban elfordul mrtkegysgeket: kb, mb, gb. Ezeket szmmal egyberva kell hasznlni, klnben hibajelzst kapunk. A % a maradkos osztst vgzi. Sajnos a terabjtot nem tmogatja, s ahogy a fenti hibajelzsekbl is lthat, a mrtkegysgek nllan nem llhatnak, mindig szmmal kell bevezetni, mg akkor is, ha egyrl van sz.

1.2.10 A konzol trlseHa mr jl telertuk a PowerShell ablakot, s szeretnnk, ha res lenne jra, akkor futtassuk a Clear-Host cmdletet. Ennek van kt gyakran hasznlt lneve is: cls, clear.

1.2.11 Kis-nagybetA PowerShell a legtbb esetben nem klnbzteti meg a kis- s nagybetket. A parancsokat, kifejezseket akr kis, akr nagybetkkel berhatjuk. De mg az ltalunk ltrehozott vltoznevek tekintetben is figyelmen kvl hagyja ezt:[2] PS I:\>$kis = 1 [3] PS I:\>$KIS 1 [4] PS I:\>get-command get-help

16

Elmlet

CommandType ----------Cmdlet

Name ---Get-Help

Definition ---------Get-Help [[-Name] ...

[5] PS I:\>GET-COMMAND get-HELP CommandType ----------Cmdlet Name ---Get-Help Definition ---------Get-Help [[-Name] ...

Az sszehasonltsoknl sincs alaphelyzetben szerepe a bet mretnek, termszetesen itt majd ezt az alapmkdst fellbrlhatjuk, hogy a kis-nagybetket tekintse klnbznek:[6] PS I:\>"alaphelyzet" -eq "ALAPHELYZET" True [7] PS I:\>"kis-nagybet rzkeny" -ceq "kis-NAGYbet rZKeNy" False

A fenti pldban az alaphelyzet szerinti egyenlsget vizsgl opertor nem kisnagybet rzkeny, ha rzkeny vltozatot szeretnnk hasznlni, akkor az a c eltaggal (azaz a case-sensitive) kln jelezni kell. Az sszehasonlts mveletrl az 1.6 Opertorok fejezetben lehet bvebben olvasni.

17

Segdprogramok

1.3 SegdprogramokHa kezdk vagyunk PowerShellben, akkor mindenkppen rdemes felszerelkeznnk nhny hasznos segdprogrammal, amelyek megknnytik a munknkat s a tanulsi folyamatot. Ebben a fejezetben nhny ilyen programot mutatok be, amelyek tbbsge ingyenesen letlthet, hasznlhat, vagy legalbbis van ingyenes prbavltozata.

1.3.1 PowerGUI, PowerGUI Script EditorA PowerShellhez az egyik legpraktikusabb segdprogram a Quest Software PowerGUI csomagja. Ez kt f programbl ll. Az els maga a PowerGUI, ami j nhny elre elksztett PowerShell parancsot tartalmaz egy fastruktrba fzve:

13. bra A PowerGUI fellete

A fastruktra egybknt bvthet, pldul Active Directory elemekkel, attl fggen, hogy milyen bvtmnyeket teleptettnk a gpnkre, s mi magunk is kszthetnk hozz faelemeket. A programban az ikonnal jelzett faelemek mgtt PowerShell szkriptek vannak:

18

Elmlet

14. bra A PowerGUI faelemek mgtti PowerShell parancsok

Ez lehet egy egyszer PowerShell parancs, n. cmdlet, mint a Processes-nl, vagy bonyolultabb szkript, mint a Services-nl. Az ablak aljn a PowerShell Code flre kattintva meg lehet figyelni, hogy pontosan mit hajt vgre a PowerGUI amikor kattintgatunk a felletn:

15. bra A PowerGUI ltal vgrehajtott parancsok

Pldul a fenti kpen, kzptjon ltszik, hogy amikor a processzek listjn a ProcessName oszlopra kattintottam, akkor erre egy get-process | Sort-Object -property ProcessName parancs hajtdott vgre. Kezdknt sokat lehet tanulni ebbl. Illetve az oszlopfejlcen jobb egrgombbal kattintva lehet krni egy ilyen listt:

19

Segdprogramok

16. bra Oszlopok, azaz tulajdonsgok kivlasztsa

Ez mutatja, hogy az adott parancs kimeneteknt kapott objektumtpusnak milyen tulajdonsgai, property-jei vannak. A msik eszkz a PowerGUI csomagban a Script Editor. Ez nagyon nagy szolglatot tesz a PowerShell-t tanulknak, hiszen ahogy gpeljk a parancsokat rgtn szintaxisellenrzst vgez, klnbz sznnel jelli a klnbz fajtj szvegelemeket (parancs, kifejezs, vltoz, sztring, stb.) Gpels kzben a lehetsges parancsokat egy listban azonnal megjelenti, a parancsok argumentumlistjt kis felugr ablakban kirja. F1-re az adott parancs helpjt is megjelenti.

17. bra Help s parancskivlaszt a PowerGUI Script Editorban

20

ElmletAz ablak fels rszben szerkeszthetjk a kdot, bal als rszben lthatjuk vltozinkat s azok rtkt, a jobb als rszben a futtatott kd kimenett olvashatjuk.

1.3.2 RegexBuddyKsbb fogunk foglalkozni a regulris kifejezsekkel, amelyek a sztringek sszehasonltsban, vizsglatban segtenek. Pl. meg lehet ilyen kifejezsek segtsgvel llaptani, hogy egy szveg vajon e-mailcmet tartalmaz-e, vagy pl. telefonszmot. Regex kifejezsekkel ki lehet nyerni szvegekbl adott formtum, adott mintra illeszked karaktersorozatokat. Regex kifejezseket rni nem egyszer, ebben segt a RegexBuddy.

18. bra Bartunk a RegexBuddy

Az ablak fels rszn lthat, hogy kivlaszthatjuk a regex kifejezsnk tjszlst, ami a PowerShell esetben .NET. Ez alatt van a szerkeszt fellet, legalul meg egy flrendszeren sok minden. A Create fl rtelmezst adja a regex kifejezsemnek, s regex elemeket, u.n. tokeneket is hozz tudok fzni. Ami mg rdekes szmunkra a Test fl, ahol minta sztringeket tudok begpelni s ellenrizni tudom, hogy a regex mintm illeszkedike arra, amire kellene, illetve nem illeszkedik-e arra, amire nem kell. Hasznos segtsget nyjt a Library fl, ahol sok problma megoldshoz vannak elre elksztett regex kifejezsek, amiket segtsgl tudunk hvni s testre tudjuk szabni a sajt ignyeinknek megfelelen.

1.3.3 ReflectorA PowerShell a .NET Frameworkre pl, a keretrendszer osztlyaival, objektumaival dolgozik, gy fontos tudni, hogy a keretrendszerben mi tallhat. A Visual Studio termszetesen az Object Browser-vel segt a .NET osztlyok feldertsben, de a PowerShell felhasznlk zme nem fejleszt, nincs szksgk ltalban a Visual Studiora, s csak az Object Browser miatt telepteni azt elg nagy luxus.

21

SegdprogramokAz interneten Lutz Rder jvoltbl elrhet egy Reflector nev kis ingyenes program (http://www.aisto.com/roeder/dotnet/ ), amellyel helyettesteni lehet az Object Browsert. Radsul ez tartalmaz egy PowerShell add-in-t, amivel PowerShell szintaxisra lehet lefordtani a .NET-es objektumokat.

19. bra Rendszergazdk Object Browsere: .NET Reflector

Ha talltunk olyan .NET osztlyt, vagy annak valamilyen tagjt, ami rdekel minket, akkor Ctrl+M billentykombincival kzvetlenl el tudjuk hvni az MSDN website megfelel lapjt, ahol rszletes lerst kapunk a kivlasztott elemnkrl.

1.3.4 PSPlusA PowerShell Plus hasonl clokat szolgl, mint a PowerGUI Script Editora, csak jval sszetettebb, tbb szolgltatst nyjt.

20. bra PowerShell Plus fellete

22

ElmletEz az eszkz integrl magban az eredeti PowerShell konzolablakhoz nagyon hasonl ablakrszt, lthatjuk a vltozkat s egyb paramtereket. Kln szkriptszerkesztje is van:

21. bra PowerShell Plus Script Editora

Ez az Office 2007 stlus szerkesztfellet hasonl szolgltatsokat nyjt, mint a PowerGUI Script Editora.

1.3.5 MoreMotion EditorA PowerShellben is elfordul az XML adatformtum, gy rdemes egy Notepad-nl esetleg okosabb XML szerkesztvel felszerelkezni. n egy teljesen ingyenes s teleptst nem ignyl programot talltam erre a clra, a MoreMotion Editort:

22. bra MoreMotion Editor: XML szerkeszt

A fenti kpeken lthat, hogy kt nzete van, az els a forrskd szint nzet, a msodik a fastruktra-nzet, amelyben az XML tag-ek hierarchijt s adattartalmt sokkal jobban t lehet tekinteni. A program rendelkezik szintaxisellenrzsi funkcival, automatikus formzsi lehetsgekkel is.

23

Alapfogalmak

1.4 AlapfogalmakMi is a PowerShell? Ketts szerepe van: egyrszt a PowerShell egy parancssori krnyezet, azaz egy olyan program, ahol a felhasznl kapcsolatba lphet a szmtgpes rendszerrel (direkt nem korltozva le az opercis rendszerre!). Ebbl a szempontbl sok olyan szolgltatst kell nyjtania, ami a gyors, knyelmes adatbevitelt, azaz a gpelst szolglja. Msrszt a PowerShell egy programnyelv is, mint ilyennek rendelkeznie kell azokkal a programrshoz szksges elemekkel, mint pldul a ciklus, vltozk, fggvnyek, adatszerkezetek. A PowerShell mindkt szempontot prblja a lehet legjobban kielgteni, tmaszkodik ms, elssorban a Unix s Linux klnbz shelljeire s onnan tveszi a legjobb megoldsokat. De termszetesen ez egy Windowsos shell, teht nem prbl kompatibilis lenni a Unixos shellekkel, hanem inkbb a Windows adottsgaihoz s lehetsgeihez alkalmazkodik, ezen bell is a .NET Framework a legfontosabb alapja. Ellenttben a DOS shellel, a PowerShell nmagban is nagyon sok parancsot tartalmaz. Pldul DOS shellben a fjlok msolst a copy.com vgzi, maga a parancssori krnyezet nem tud fjlt msolni. Ezzel szemben a PowerShellnek van egy copy-item parancsa, u.n. cmdlet-je, amellyel lehet fjlt (de nem csak fjlt!) msolni.

1.4.1 ArchitektraA PowerShell teht a .NET Frameworkre pl, az 1.0-s PowerShellhez a 2.0-s .NET Framework szksges. Ez a rpls szmos elnnyel jr, fleg ha azt is tudjuk, hogy a PowerShell objektumokkal dolgozik. Pl. a dir parancsot futtatva nem egyszeren egy karaktersorozatot kapunk vissza vlaszknt, hanem a fjlok, alknyvtrak objektumainak halmazt, u.n. collection-t, gyjtemnyt. Teht kt megjegyzend fogalom: OBJEKTUM, COLLECTION! Mi az, hogy objektum? Olyan kpzdmny, amely tulajdonsgokkal (property) s meghvhat metdusokkal (method) rendelkezik. A hagyomnyos shellek (command.com, cmd.exe, bash, stb.) mindegyikt karakterlnc-orientltnak nevezhetjk; a parancsok bemenete s kimenete (nhny specilis esetet nem szmtva) karakterlncokbl ll. Pldul a cmd.exe esetn a dir parancs kimenete valban s pontosan az a fjl- s mappalistt ler karaktersorozat, amely a kpernyn megjelenik, se tbb, se kevesebb. Ez bizonyos szempontbl j, hiszen gy azt ltjuk, amit kapunk. Msrszrl viszont csak azt kapjuk, amit ltunk, ez pedig sajnos nem tl sok. A PowerShell adatkezelse azonban alapjaiban klnbzik ettl; az egyes parancsok bemenete s kimenete is .NET osztlyokon alapul objektumokbl (objektumreferencikbl) ll, vagyis a kirtakon kvl tartalmazza a .NET objektum szmtalan msik tulajdonsgt is. Amint lthattuk, a dir parancs kimenete itt is a kpernyre kirt fjl s mappalistnak tnik, de ez csak egyszer rzki csalds, a kimenet valjban egy System.IO.DirectoryInfo s System.IO.FileInfo osztly objektumokbl ll gyjtemny. Mivel azonban az objektumok nem alkalmasak emberi fogyasztsra,

24

Elmletkpernyn val megjelentsk termszetesen szveges formban, legfontosabb (illetve kivlasztott) jellemzik felsorolsval trtnik. A fentiekbl nyilvnvalan kvetkezik az objektumorientlt megkzelts kt fontos elnye; egyrszt a parancsok kimenete rengeteg informcit tartalmaz, amelyeket szksg esetn felhasznlhatunk, msrszt nincs szksg szvegfeldolgoz parancsok s eszkzk hasznlatra, ha a kimenetknt kapott adathalmazbl csak egy meghatrozott informcidarabra van szksgnk, mivel minden egyes adatmez egyszeren a nevre val hivatkozssal, nllan is lekrdezhet. Kpzeljk el pldul, hogy a dir parancs ltal produklt fenti listbl szvegfeldolgoz parancsokkal kell kivlasztanunk azokat a fjlokat (mappkat nem), amelyek 2007. prilis 12-e utn mdosultak. Jaj. Persze megoldhat a feladat, de helyesen fog lefutni az a szkript egy nmet nyelv Windowson is? (s akkor pldul a knai nyelv rendszerekrl mg nem is beszltnk.) Ha viszont a kimenet objektumokbl ll, akkor termszetesen egyltaln nincs szksg a megjelen szveg feldolgozsra, mert minden egyes objektum tudja magrl, hogy fjl, vagy mappa, s az opercis rendszer nyelvtl fggetlenl, DateTime objektumknt adja vissza az utols mdostsnak idejt. Most egyelre - klnsebb magyarzat nlkl - nzzk, hogy egy fjl milyen objektumjellemzkkel, tagjellemzkkel (member) br, a get-member cmdlet futtatsval:[2] PS C:\> get-item szamok.txt | get-member TypeName: System.IO.FileInfo Name ---AppendText CopyTo Create ... Delete ... MoveTo ... Attributes CreationTime CreationTimeUtc Directory DirectoryName Exists Extension FullName IsReadOnly LastAccessTime LastAccessTimeUtc LastWriteTime LastWriteTimeUtc Length Name BaseName Mode MemberType ---------Method Method Method Method Method Property Property Property Property Property Property Property Property Property Property Property Property Property Property Property ScriptProperty ScriptProperty Definition ---------System.IO.StreamWriter AppendTe... System.IO.FileInfo CopyTo(Strin... System.IO.FileStream Create() System.Void Delete() System.Void MoveTo(String destF... System.IO.FileAttributes Attrib... System.DateTime CreationTime {g... System.DateTime CreationTimeUtc... System.IO.DirectoryInfo Directo... System.String DirectoryName {get;} System.Boolean Exists {get;} System.String Extension {get;} System.String FullName {get;} System.Boolean IsReadOnly {get;... System.DateTime LastAccessTime ... System.DateTime LastAccessTimeU... System.DateTime LastWriteTime {... System.DateTime LastWriteTimeUt... System.Int64 Length {get;} System.String Name {get;} System.Object BaseName {get=[Sy... System.Object Mode {get=$catr =...

25

AlapfogalmakReparsePoint ScriptProperty System.Object ReparsePoint {get...

Mint ahogy egy fjltl elvrhatjuk, msolhatjuk (CopyTo), trlhetjk (Delete) s egy csom jellemzjt kiolvashatjuk: utols hozzfrs idejt (LastAccessTime) s hosszt (Length). Azaz ezekhez a tevkenysgekhez nem kell kls program, mg csak kln PowerShell parancs sem, maga az objektum tudja ezeket. Pl. a trls:[3] PS C:\> (get-item szamok.txt).Delete()

Visszatrve pl. a dir parancs futtatsra, ltalban egy knyvtrban nem egy fjl vagy alknyvtr van, hanem tbb. Ebben az esetben a PowerShell a parancs vgrehajtsa sorn egy u.n. collection-t, azaz egy objektumhalmazt, objektumgyjtemnyt vagy ms kifejezssel objektumtmbt kapunk vissza. Ennek a halmaznak radsul nem felttlenl kell egyforma tpus elemekbl llnia, mint ahogy egy knyvtrban is lehetnek fjlok is s alknyvtrak is. A PowerShell az ilyen collection-k, azaz gyjtemnyek feldolgozsra nagyon sok praktikus, nyelvi szint tmogatst ad, amit a ksbbiekben ltni fogunk.

1.4.2 OOP alapokAz elzekben mr tallkozhattunk azzal a kijelentssel, hogy a PowerShell egy objektumorientlt shell. Els hallsra taln furcsnak tnhet ez a szkapcsolat, mr csak azrt is, mert ilyen egyszeren nem ltezett korbban; a PowerShell az els, s pillanatnyilag az egyetlen ilyen tulajdonsg parancsfeldolgoz. A kvetkezkben ttekintjk, mit is jelent, s milyen kvetkezmnyekkel jr az objektumorientlt felpts. Nzzk meg rszletesebben az objektumorientlt programozshoz kapcsold legfontosabb fogalmakat, amelyek pontos ismeretre a ksbbiekben felttlenl szksgnk lesz.

1.4.2.1 Osztly (tpus)Az osztlyok az objektumok tervrajzai; tartalmazzk a klnfle funkcikat megvalst programkdot s deklarljk az objektumok adatszerkezeteit. Az osztlyok s objektumok viszonya megegyezik a vltoztpus s konkrt vltoz viszonyval. Ahogyan a vltozhoz tartoz tpus meghatrozza a vltoz lehetsges llapotait, s rajta vgezhet mveleteket, gy hatrozza meg az objektum osztlya a benne trolhat adatokat (tulajdonsgokat), s az ltala elvgezhet mveleteket (metdusokat). Az osztly definilja teht a majdani objektumok adatait, s azokat a mveleteket (eljrsok s fggvnyek), amelyek elvgzsre az osztly alapjn ltrehozott objektum kpes.

26

Elmlet

1.4.2.2 Pldny (objektum)Az adott osztly (tervrajz) alapjn ltrehozott objektumpldnyok kpesek az osztlyban definilt vltozknak megfelel informci trolsra, s az osztly ltal meghatrozott mveletek (eljrsok s fggvnyek) vgrehajtsra. Minden objektum egy meghatrozott memriaterletet foglal el, itt trolja adatait. Az adatok pillanatnyi rtkt az objektum llapotnak nevezzk. Kt objektum azonban akkor sem azonos, ha llapotuk megegyezik (vagyis valamennyi adatuk rendre egyenl), mivel az objektumot nem az llapota, hanem az ltala elfoglalt memriaterlet kezdcme azonostja. Programjainkban az objektumok teht memriacmknt (objektumreferencia) jelennek meg.

1.4.2.3 PldnyostsAz objektum osztlya teht az objektum viselkedst, kpessgeit meghatroz kdbl, s adatainak tpusdefinciibl ll. Pldnyostsnak azt a mveletet nevezzk, amelynek sorn a szksges memriaterletet lefoglalva, egy osztly alapjn objektumot hozunk ltre. Az objektum ltrehozsakor elvgzend mveleteket az adott osztlyban definilt specilis fggvny, az osztly konstruktora hatrozza meg. Az osztly alapjn ltrehozott objektum adatszegmense a konstruktornak tadott paramterlista, vagy ms adatforrs alapjn a pldnyosts sorn, vagyis az objektum ltrehozsa kzben tltdik fel. Programunk szempontjbl a pldnyosts vgtermke egy memriacmet tartalmaz vltoz (objektumreferencia, mutat, pointer); a kvetkezkben ennek segtsgvel rhetjk el az adott pldny adatait, s hvhatjuk meg az osztlyban definilt eljrsokat s fggvnyeket. Ha egyszerre tbb azonos osztly objektumot is hasznlunk, az objektumok kdja csak egyetlen pldnyban kerl a memriba (hiszen ez minden azonos osztlyba tartoz objektum esetn felttlenl egyforma), de termszetesen az adatszegmens minden objektum esetben nllan ltezik. Minden objektum tartalmaz egy referencit (this), amely az osztlyt azonostja, ennek felhasznlsval hvhatja meg az osztlyban trolt metdusokat.

1.4.2.4 Metdusok s vltozkAz osztlyokban definilt fggvnyeket s eljrsokat az osztly, illetve az osztly alapjn ltrehozott objektum metdusainak nevezzk. Ugyangy, az osztlyok vltozit statikus vltozknak, a

1.4.2.5 Pldnyvltoz, pldnymetdusAzokat a vltozkat, amelyek objektum-pldnyonknt kln memriaterletre kerlnek pldnyvltozknak, a pldnyvltozkat felhasznl metdusokat pedig pldnymetdusoknak nevezzk. Ha meghvjuk egy objektum pldnymetdust, akkor a metdus kdja az osztlybl szrmazik ugyan, az elvgzett mveletek viszont ltalban az

27

Alapfogalmakobjektum pldny sajt adatait fogjk felhasznlni, vagyis megvltoztatjk az objektum llapott.

1.4.2.6 Statikus vltoz, statikus metdusBizonyos vltozk nem egy konkrt objektum-pldnyra, hanem az egsz osztlyra jellemzk. Az ilyen kzs, az egsz osztlyra jellemz vltozkat osztlyvltozknak, vagy statikus vltozknak nevezzk. A statikus vltozk rtke minden pldny esetn megegyezik, ezrt csak egy helyen kell trolni, minden pldny ezt az egy memriaterletet ri el. Osztlymetdusnak, vagy statikus metdusnak nevezzk azokat a metdusokat, amelyek objektum-pldny nlkl, kzvetlenl az osztlyra val hivatkozssal futtathatk. A statikus metdusok csak a statikus vltozkat rik el a pldnyvltozkat nem. Teht a pldnyvltozkat csak a pldnymetdusok rik el, mg a statikus vltozkat a statikuss pldnymetdusok egyarnt hasznlhatjk.

1.4.2.7 Vltozk elrejtseAz objektumok egyik fontos tulajdonsga, hogy a klvilg szmra csak azokat a metdusokat (s ritkn adatokat) teszi elrhetv, amelyek felttlenl szksgesek az objektum hasznlathoz. Az objektum teht egy jl meghatrozott interfszen keresztl rhet el, amelyet termszetesen az osztly kszti igyekeznek a lehet legkisebbre kszteni. Az osztlyokban definilt vltozk ltalban csak metdusokon keresztl, vagyis ellenrztt mdon rhetk el. Ezzel megakadlyozhat az objektum llapotnak elrontsa, azaz minden adatmeznek csak olyan rtk adhat, amelynek trolsra azt a programoz sznta. Elnys tovbb az is, hogy ilyen mdon az osztly teljes bels adatszerkezete lecserlhet anlkl, hogy az osztlyt hasznl komponenseknek errl tudniuk kellene.

1.4.2.8 Overloaded metdusokA metdus szignatrja a nevn kvl tartalmazza paramtereinek szmt s az egyes paramterek tpust is. A metdusokat a fordtprogram nem pusztn a nevk, hanem a szignatrjuk alapjn azonostja, vagyis egy osztlyon bell lehet tbb azonos nev, de eltr paramterlistj metdus is. A metdus meghvsakor a fordt a nv s az aktulisan tadott paramterek alapjn vlasztja ki azt a metdust, amelyik le fog futni. Ilyen metdusokkal igen gyakran fogunk tallkozni a .NET keretrendszer osztlyaiban is. A je3 lensget method overloading -nak, azaz metdus-jratltsnek, -felltltsnek, -fellbrlsnak nevezzk.

3

Sajnos erre a kifejezsre nincsen j magyar sz, a szoksosan hasznlt tlterhelt metdus kifejezs inkbb valamifle elmegygyszati diagnzisra emlkeztet.

28

Elmlet

1.4.2.9 rkldsAz rklds kt osztly kztt rtelmezett kapcsolat, azt fejezik ki, hogy az egyik osztly (az utd) specializlt vltozata a msiknak, az sosztlynak. A specializls sorn egy mr meglv objektum lershoz, tervrajzhoz, j, egyedi jellemzket s kpessgeket adunk hozz. A specializlt osztly teht rkli az sosztly adatait s metdusait, de az rkls sorn ezekhez jabbakat is hozzadhatunk, illetve mdosthatjuk a meglvket. Egy osztly rktsekor hrom lehetsget hasznlhatunk: j vltozkat adhatunk hozz az sosztlyhoz. j metdusokat adhatunk hozz az sosztlyhoz. 4 Fellrhatjuk az sosztly metdusait.

1.4.3 Mi is az a .NET keretrendszerA .NET mr sok ve velnk van, s a hrom bet valsznleg mindenkinek ismersen cseng, de taln nem flsleges rviden ttekinteni, hogy pontosan mirl is van sz, s mirt j neknk ez az egsz. A .NET Framework a Windows opercis rendszerekbe egyre szorosabban integrld komponens, amely az alkalmazsok j genercijnak fejlesztst s futtatst teszi lehetv. A .NET egyszeren az infrastruktra szintjre emeli szmos ltalnos feladat megoldst, amelyekkel korbban minden programoznak magnak kellett jl-rosszul megkzdenie. Aki ismeri s betartja a szablyokat, az hasznlhatja az infrastruktrt. A .NET alap programok mr nem kzvetlenl veszik ignybe az opercis rendszer szolgltatsait s nem is kzvetlenl a processzor futtatja ket; egy jabb absztrakcis rteg (ez maga a .NET keretrendszer) kapcsoldott be a jtkba. Ez termszetesen nmi sebessgcskkenst okoz a programfuttats szintjn, de igen jelents sebessgnvekedssel jr, ha a fejlesztsre fordtott idt vesszk figyelembe. A keretrendszer alapveten kt komponesbl ll, ezek a CLR (Common Language Runtime) s a mgtte ll osztlyhierarchia, a Class Library.

1.4.3.1 Futtatkrnyezet (Common Language Runtime, CLR)A .NET keretrendszer felhasznlsval ksztett programok, egy szoftveres virtulis krnyezetben (CLR) futnak, amely biztostja a programfuttatshoz szksges feltteleket. A CLR egysges futsi krnyezetet biztost a .NET alap programok szmra, fggetlenl attl, hogy azokat milyen programnyelven ksztettk. Elvgzi a memriakezelst s biztostja a programfutshoz szksges egyb alapvet szolgltatsokat, kezeli a programszlakat, biztonsgos futsi krnyezetet ad a programkdnak, s megakadlyozza, hogy a

4

Az sosztly adatait nem lehet fellrni.

29

Alapfogalmakfuttatott programok brmifle ltala szablytalannak tlt mveletet vgezzenek. A CLR fennhatsga alatt fut programokat felgyelt kdnak (managed code) nevezzk. A CLR biztostja a programnyelvek kztti teljes egyttmkdst, gy lehetv vlik a klnbz nyelveken megrt komponensek problmamentes egyttmkdse is. A CLR szigor tpusrendszerre pl, amelyhez minden CLR-kompatibilis programnyelvnek alkalmazkodnia kell. Ez azt jelenti, hogy az adott nyelv minden elemnek (tpusok, struktrk, elemi adattpusok) a CLR ltal ismert tpusokk konvertlhatnak kell lennie. Tovbbi felttel, hogy a fordtprogramoknak a kdban lv tpusokat s hivatkozsokat ler metaadatokat kell elhelyeznik a lefordtott llomnyokban. A CLR ezek felhasznlsval felgyeli a folyamatokat, megkeresi s betlti a megfelel osztlyokat, elhelyezi az objektum-pldnyokat a memriban, stb. A CLR minden erforrst az adott folyamat szmra ltrehozott felgyelt heap-en (halom) helyez el. A felgyelt heap hasonl a hagyomnyos programnyelvek ltal hasznlt heap-hez, de az itt ltrehozott objektumokat nem a programnak kell megszntetnie, a memria felszabadtsa automatikusan trtnik, ha az adott objektumra mr nincs tbb szksg. A .NET egyik fontos szolgltatsa a szemtgyjt (Garbage Collector, GC), amely kpes a hivatkozs nlkl maradt objektumok felkutatsra, s az ltaluk lefoglalt memriaterlet felszabadtsra.

1.4.3.2 Class Library (osztlyknyvtr)A Class Library egy tbb ezer(!) osztlybl ll gyjtemny, amelyek segtsgvel szinte brmilyen feladatot megoldhatunk, lehetv teszi parancssori, grafikus, vagy webes felletet, hlzati s biztonsgi szolgltatsokat hasznl alkalmazsok fejlesztst. Segtsgvel gyakorlatilag a Windows rendszerek valamennyi szolgltatsa a korbbinl lnyegesen egyszerbb formban elrhetv vlik. A Class Library lehetv teszi szinte az szszes, eddig csak a Win32 API segtsgvel megvalsthat szolgltats hasznlatt, s mg tbb ezer ms feladatra is megoldst ad. Megtallhatjuk benne a klasszikus algoritmusok (rendezsek, keressek, stb.) megvalstst, valamint rengeteg gyakori feladat szinte ksz megoldst is. A Class Library-t termszetesen brmely .NET-kpes programnyelvbl hasznlhatjuk, a nyelvek kztti klnbsg gy tulajdonkppen szinte jelentktelen szintaktikai klnbsgg vlik, a lnyeg, az osztlyknyvtr azonos, brmelyik nyelvet (vagy akr a PowerShellt) is hasznljuk.

1.4.3.3 ProgramnyelvekA CLR ltal nyjtott szolgltatsokat a Visual Basic, a C#, a Visual C++, s a Jscript programnyelvekbl, nhny kls gyrt ltal fejlesztett nyelvbl (pldul Eiffel, Perl, COBOL stb.), illetve most mr a PowerShellbl is elrhetjk. A szksges fordtprogramok parancssori vltozatai megtallhatk a .NET Framework SDK csomagban klnfle egyb eszkzkkel egytt (debugger, disassembler stb.). Ilyen mdon a .NET alap programok ksztshez nincs felttlenl szksg integrlt fejleszti krnyezetre (pldul a

30

ElmletVisual Studiora), elvben brmilyen alkalmazst elkszthetnk a notepad.exe s a megfelel fordtprogram felhasznlsval.

1.4.3.4 ProgramfordtsA .NET fordtprogramjai forrskdunkat egy kztes nyelvre (Intermediate Language, IL) fordtjk. Az IL olyan processzorfggetlen kd, amely igen hatkonyan fordthat tovbb egy adott platform gpi kdjv. A compilerek kimenete teht az IL-kd, amit a fordtprogram exe, vagy dll llomnyba csomagol. Az elksztett exe llomnyok a felhasznl szempontjbl a szoksos mdon futtathatk, a httrben azonban termszetesen egszen ms trtnik.

1.4.3.5 ProgramfuttatsMivel a processzor csak natv programok futtatsra kpes, az IL llomnyt vgrehajts eltt gpi kdd kell fordtani. A gpi kd ellltst a futsidej fordt (just-in-time compiler, JIT) vgzi el, de csak akkor, ha az adott kd valban le is fog futni. Az IL llomnyba irnyul minden metdushvs az els alkalommal meghvja a JIT-fordtt, ami gpi kdd alaktja az adott metdust, ezt futtatja majd a processzor. Ha jra meghvjuk ugyanazt a metdust, mr nincs szksg fordtsra, kzvetlenl az eltrolt gpi kd vltozat fog lefutni. gy az egyes metdusokat csak egy alkalommal kell lefordtani, ami jelentsen gyorsthatja a programok futst. Tovbbi idmegtakartst jelent, hogy a nem hasznlt IL-kdot a JIT egyltaln nem fordtja le. Amikor az alkalmazs lell, a generlt gpi kd automatikusan trldik, jraindts utn teht jra szksg van a metdusok futsidben trtn fordtsra. A JIT fordt termszetesen minden tmogatott processzor-architektrra rendelkezsre ll, gy a fordtprogramok ltal ksztett IL-kd vltoztats nlkl futtathat a 5 klnbz architektrj szmtgpeken.

1.4.3.6 Assemblyk (kdkszletek)A .NET-ben az assemblyk jelentik az alapvet teleptsi, verzikvetsi s biztonsgi egysget. Az assembly tbb fizikai dll-t s esetleg ms fjlokat egy nll logikai egysgben gyjt ssze. Az assemblykben lv fizikai dll-ek a modulok, amelyekben minden esetben IL-kd tallhat. Az assembly ezen fell nler adatokat (manifest) is tartalmaz, ami metaadatok formjban rja le az assemblyben tallhat kdot s egyb erforrsokat. Ha egy assemblyt tbb alkalmazs is hasznl, akkor azt egy specilis helyre, a .NET globlis assembly gyorsttrba (Global Assembly Cache, GAC) kell helyeznnk az SDK gacutil.exe programjnak segtsgvel. Az osztott hasznlat assemblyk nyilvnos kulcs titkostssal biztostjk nevk egyedisgt.

5

Persze csak akkor, ha nincs benne olyan API hvs, amely csak az adott platformon ltezik.

31

Alapfogalmak

1.4.3.7 rtk- s referenciatpusokA .NET keretrendszerben kt alapveten eltr tpussal tallkozhatunk. Az rtk tpusok (ilyen pldul az int, a byte, vagy a char) a veremmemriban jnnek ltre, s helyk automatikusan felszabadul, amikor a deklarl kdblokk vget r, vagyis nincs szksgk a szemtgyjt szolgltatsaira. Ha rtkadsban hasznljuk ket, akkor nem egy rjuk mutat referencia, hanem tnyleges rtkk msoldik t. Minden egyes rtk tpus vltozhoz sajt, nll memriaterlet tartozik, vagyis az egyik vltozn vgzett mvelet egyetlen msik vltoz tartalmt sem vltoztathatja meg. Sajt magunk is ltrehozhatunk rtk szerinti tpusokat a struct kulcsszval. Ilyen struktra pldul az int tpushoz tartoz System.Int32 is, amely az osztlyokhoz hasonlan adatmezket s metdusokat is tartalmazhat. A referenciatpusok nem magt az adatot, hanem egy memriacmre val hivatkozst trolnak. Egy memriacmre tbb hivatkozs is mutathat, teht egy referencin (vagyis az ltala mutatott objektumon) vgzett mveletek a tbbi referencit is rintik. A referenciatpusokat a new opertorral hozzuk ltre, s azok a szemtgyjt (GC) ltal kezelt memriba kerlnek (vagyis a felgyelt heap-re). Amikor az rtkadsokban referenciatpusokat hasznlunk, mindig csak a referencia rtke msoldik t, a valdi objektumhoz nem nylunk hozz. Valamennyi rtk s referenciatpus elrhet System.Object osztly referencia segtsgvel. Ha az rtk szerinti tpust referencin keresztl rjk el, akkor a fordt olyan kdot hoz ltre, amely a tpusnak megfelel memrit a heap-en foglalja le, s tmsolja ide a vltoz tartalmt a verembl. Ezt az eljrst Boxing-nak (dobozolsnak) nevezzk.

1.4.4 COM-objektumokA Component Object Model (COM) a komponens alap rendszerek fejlesztsnek Microsoft fle szabvnya. Lehetv teszi, hogy a COM-gyfelek binris szinten hvjanak meg olyan fggvnyeket, amelyeket a COM-objektumok szmukra elrhetv tesznek. A COM-objektumok mindegyike egyedileg azonosthat, nll komponens, a klnfle alkalmazsok, s ms komponensek egy jl meghatrozott csatolfelleten keresztl vehetik ignybe az adott komponens szolgltatsait. A Microsoft is COM-komponensekkel tette lehetv a hozzfrst az opercis rendszer fggvnyeihez, gy a rendszerfelgyelettel kapcsolatos szkriptek igen jelents rsze hasznl COM-objektumokat; segtsgkkel rhetjk el a rendszer klnfle elemeit, jrahasznosthatjuk a mr ltez, elre megrt funkcikat. PowerShell esetn gyakran mg akkor is COM-objektumot hasznlunk, amikor ltszlag nem, mivel a .NET rendszerfelgyelettel kapcsolatos osztlyainak legtbbje titokban szintn a megfelel COM-objektum metdusait hvogatja (ADSI, WMI, stb.). A szkriptjeinkben hasznlt COM-objektumok mindegyike teht olyan funkcionalitsgyjtemny, amelyet gondos kezek elre elksztettek, s jl felhasznlhat formban

32

Elmletsszecsomagoltak szmunkra. Ezek az objektumok szinte minden esetben binris formban lteznek, gpnkn egy dinamikusan csatolt knyvtr (dll), vagy Active-X kontroll (ocx) kpben tallhatk meg. Szerencsre a COM-objektumok bels felptsrl, adatszerkezeteirl semmit nem kell tudnunk ahhoz, hogy megrhassuk a velk kommunikl szkriptet, s felhasznlhassuk a bennk rejtz kpessgeket. Az objektumokkal val kommunikci metdusaik meghvst s tulajdonsgaik belltst jelenti; a rendszerfelgyeleti szkriptek legfontosabb funkcii ilyen mdon valsthatk meg.

1.4.4.1 TpusknyvtrakTpusknyvtrnak az olyan csomagokat (dll vagy ocx fjlok) nevezzk, amelyek tbb, ltalban egymssal szoros kapcsolatban ll osztlybl llnak. A tpusknyvtr hasznlatval az abban szerepl osztlyok mindegyike alapjn ltrehozhatjuk a megfelel objektumot, azaz elvgezhetjk az osztly pldnyostst.

1.4.5 Command s cmdletA PowerShellben a parancsokat cmdlet-nek (kommandlet) hvjuk. Hogy mirt? Valszn megklnbztetsl a DOS-os parancsoktl, amelyek valjban kls programok meghvst jelentik (pl.: netsh netsh.exe, attrib attrib.exe). Lnyeg, hogy a cmdletek a PowerShell sajtjai, egysges szerkezetet alkotnak ige-fnv formban. Ezeket a get-command cmdlettel ki is listzhatjuk:[4] PS C:\> get-command CommandType ----------Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet ... Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Name ---Add-Content Add-History Add-Member Add-PSSnapin Clear-Content Clear-Item Write-Debug Write-Error Write-GZip Write-Host Write-Output Write-Progress Write-Tar Write-Verbose Write-Warning Write-Zip Definition ---------Add-Content [-Path] ("Hell" | get-member replace).definition System.String Replace(Char oldChar, Char newChar), System.String Replace( String oldValue, String newValue)

Ugyanez (legalbbis az eleje) persze megjelenik egy kznsges Get-Member hvs kimenetben is (Definition oszlop), de ott a szks hely miatt a hosszabb szvegek vge ltalban mr nem lthat.

1.4.8 Alias, becenv, lnvAhogy a fejezet bevezetjben emltettem, a PowerShell ketts clt szolgl: j shell s j programnyelv prbl lenni. A j shellre az jellemz, hogy knyelmes, knnyen kezelhet, keveset kell gpelni, fl szavakbl is megrti a felhasznlt. Ennek eszkze a nhny betbl ll alias (becenevek, lnevek) hasznlatnak lehetsge. lnevet kapcsolhatunk (akr tbbet is) klnbz PowerShell elemekhez. Az alias brmilyen parancsban, kifejezsben teljes rtk helyettestje gazdjnak, gy nincs szksg az eredeti nv begpelsre. Az lnevek termszetesen szkriptekben is korltozs nlkl hasznlhatk, de 6 alkalmazsuk jelentsen ronthatja a szkript olvashatsgt . lnevet a kvetkez elemekhez rendelhetnk: 6

PowerShell fggvnyek PowerShell szkriptek

Ugyancsak a jobb olvashatsg miatt nem nagyon hasznlunk aliasokat a knyvben szerepl mintapldkban s szkriptekben sem.

39

Alapfogalmak Fjlok Brmilyen vgrehajthat llomny (exe, com, cmd, vbs, stb.)

A PowerShell szmos beptett lnvvel is rendelkezik, ezek kzl nhnnyal (dir, cd, stb.) mr a korbbi fejezetekben is tallkozhattunk. Az lnevek teljes listjt a GetAlias cmdlet jelenti meg:PS C:\> Get-Alias CommandType ----------Alias Alias Alias Alias Alias Alias ... Name ---ac asnp clc cli clp clv Definition ---------Add-Content Add-PSSnapin Clear-Content Clear-Item Clear-ItemProperty Clear-Variable

Rendelkezsnkre ll tovbb az Alias: meghajt is, amely a mr megismert mdon teszi hozzfrhetv a beceneveket:PS C:\> Set-Location alias: PS Alias:\> Get-ChildItem

Ha nem a teljes listra, hanem csak egy konkrt aliasra vagyunk kvncsiak, akkor a kvetkez parancsot hasznlhatjuk:PS C:\> Get-Alias -name dir CommandType ----------Alias Name ---dir Definition ---------Get-ChildItem

Kiss bonyolultabb a helyzet, ha az egy adott parancshoz hasznlhat aliasokat szeretnnk felderteni (termszetesen ilyenbl tbb is lehet). Az albbi parancs a Set7 Location cmdlethez tartoz lneveket listzza ki :PS C:\> Get-Alias * | Where-Object {$_.Definition -eq "Set-Location"} CommandType ----------Alias Alias Alias Name ---sl cd chdir Definition ---------Set-Location Set-Location Set-Location

A mr ismert Get-Alias cmdleten kvl az albbi listban lthat ngy tovbbi parancs is az aliasokkal kapcsolatos klnfle mveletek elvgzsre szolgl.7

A parancs egyes rszeinek jelentsrl a kvetkez fejezetben lesz sz.

40

ElmletPS C:\> Get-Help *-alias Name ---Export-Alias Get-Alias Import-Alias New-Alias Set-Alias Category -------Cmdlet Cmdlet Cmdlet Cmdlet Cmdlet Synopsis -------Exports information a... Gets the aliases for ... Imports an alias list... Creates a new alias. Creates or changes an...

A New-Alias cmdlet segtsgvel (meglepets!) j lneveket definilhatunk, paramterknt az alias nevt s a vele helyettestend parancsot kell megadnunk. Az albbi parancs a word aliast hozza ltre, amely a tovbbiakban a szvegszerkeszt egyszer indtst teszi lehetv (termszetesen a winword.exe valdi helyt kell megadnunk):PS C:\> New-Alias -name word -Value "c:\program files\microsoft office\office10\winword.exe" PS C:\> word

A meghajtkhoz hasonlan a ltrehozott aliasok is csak az adott munkameneten bell lnek, a rendszeresen hasznlni kvnt darabokat a PowerShell profilba kell felvennnk (lsd ksbb). Az Export-Alias cmdlet segtsgvel a teljes alias listt fjlba menthetjk, a fjl pedig (pldul egy msik szmtgpen) az Import-Alias parancs segtsgvel tlthet vissza.

1.4.9 PSDriveMivel a PowerShellnek kiterjedt sajt parancskszlete van ezrt logikus az elkpzels, hogy egy-egy parancs hasonl objektumokon is ugyanabban a formban futtathat lehessen. Pldul a fjlrendszer s a registry is hasonl mappastruktra-szeren pl fel. Ebbl jhetett a PowerShell alkotinak az az tlete, hogy kiterjesztettk a meghajt fogalmt, PSmeghajt lett gy a fjlrendszeren kvl a registry, a tanstvnytr, de a fggvnyeinket s a krnyezeti s sajt vltozinkat is ilyen PSDrive-okon keresztl is megnzhetjk. Ezekhez a klnbz PSDrive-okhoz tartozik egy-egy provider (ami egy .NET alap program), ami biztostja az egysges felletet, amelyhez a PowerShell cmdletjei csatlakozhatnak. A meghajtk (illetve a mgttk ll providerek) teszik lehetv, hogy a SetLocation, a Get-ChildItem, stb. parancsok a fjlrendszerben, a registryben, a tanstvnytrban s mg szmos ms helyen is teljesen azonos mdon mkdhessenek. A provider ltal tmogatott cmdletek mindegyike hasznlhat a providerre alapul meghajtkon, illetve vannak specilisan egy meghatrozott providerhez kszlt cmdletek is. Az egyes providerek gynevezett dinamikus paramtereket is adhatnak a cmdletekhez, amelyek csak akkor hasznlhatk, ha a cmdletet az adott provider segtsgvel ltrehozott adatforrson hasznljuk. A PowerShell rendszerrel kapott providerek kszlete tovbb bvthet, gy jabb adatforrsok (pldul az Active Directory!) is elrhetv tehetk a szoksos cmdletek szmra (lsd ksbb).

41

AlapfogalmakA PowerShell meghajtk teht olyan logikai adattrak, amelyek a megfelel provider kzremkdsvel a fizikai meghajtkhoz hasonl mdon rhetk el. A PowerShell meghajtk semmilyen mdon nem hasznlhatk a shell krnyezeten kvlrl, de termszetesen a fizikai s hlzati meghajtk csatlakoztatst, illetve eltvoltst a shell is rzkeli. A PSmeghajtk kilistzshoz hasznlhatjuk a Get-PSDrive cmdletet, egy ilyen drive-on bell rvnyes pldul a get-childitem parancs, azaz alias dir:[1] PS C:\> Get-PSDrive Name ---Alias C cert D E Env F Function G HKCU HKLM Variable Provider -------Alias FileSystem Certificate FileSystem FileSystem Environment FileSystem Function FileSystem Registry Registry Variable Root ---C:\ \ D:\ E:\ F:\ G:\ HKEY_CURRENT_USER HKEY_LOCAL_MACHINE CurrentLocatio n --------------

[2] PS C:\> dir hkcu: Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER SKC --2 0 23 0 1 4 3 37 0 0 0 VC -0 32 1 2 6 0 1 0 0 1 4 Name ---AppEvents Console Control Panel Environment Identities Keyboard Layout Printers Software UNICODE Program Groups SessionInformation Volatile Environment Property -------{} {ColorTable00, ColorTable01, Colo... {Opened} {TEMP, TMP} {Identity Ordinal, Migrated5, Las... {} {DeviceOld} {} {} {ProgramCount} {LOGONSERVER, CLIENTNAME, SESSION...

[3] PS C:\> dir 'HKCU:\Keyboard Layout' -Recurse Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Keyboard Lay out SKC --1 VC Name -- ---0 IMEtoggle Property -------{}

42

ElmletHive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Keyboard Lay out\IMEtoggle SKC --0 VC Name -- ---0 scancode Property -------{}

Hive: Microsoft.PowerShell.Core\Registry::HKEY_CURRENT_USER\Keyboard Lay out SKC --0 0 0 VC -1 0 3 Name ---Preload Substitutes Toggle Property -------{1} {} {Hotkey, Language Hotkey, Layout ...

1.4.9.1 Meghajtk ltrehozsa s trlse (New-PSDrive, Remove-PSDrive)PSDrive ltrehozsval a gyakran hasznlt helyek elrst jelentsen megknnythetjk. Feladat: Ksztsnk egy Run nev PS meghajtt, amely a registry HKLM/Software/Microsoft/Windows/CurrentVersion/Run helyre mutat!

?

A New-PSDrive paramtereknt az j meghajt nevt, a hasznland providert s a gykr elrsi tjt kell megadnunk az albbiak szerint, s mris hasznlhatjuk a frissen ltrehozott meghajtt:PS C:\> New-PSDrive -Name Run -PSProvider Registry -root HKLM:\Software\Mi crosoft\Windows\CurrentVersion\Run Name ---Run Provider -------Registry Root ---HKEY_LOCAL_MACHINE\Software\Micr... CurrentLocat ion ------------

PS C:\> Set-Location Run: PS Run:\> Get-ChildItem Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\ Microsoft\Windows\CurrentVersion\Run SKC --3 VC Name -- ---0 OptionalComponents Property -------{}

43

AlapfogalmakA ltrehozott meghajt csak az adott PowerShell munkamenetben hasznlhat, kilpskor egyszeren elvsz. A rendszeresen hasznlt meghajtkat mgsem kell minden egyes alkalommal jra ltrehoznunk, a megfelel parancsok beilleszthetk a PowerShell indtsakor automatikusan lefut profil-szkriptbe is (lsd ksbb). Ha a munkameneten bell trlni szeretnnk a ltrehozott meghajtt, ezt nagyon egyszeren megtehetjk, csupn a nevt kell paramterknt megadnunk a Remove-PSDrive cmdletnek:PS C:\> Remove-PSDrive Run

Korbban emltettk, hogy a PSmeghajtk csak a PowerShellbl rhetk el, a Windows, s ms alkalmazsok nem ismerik fel az ilyen mdon ltrehozott tvonalakat. Ha azonban egy kls programot a shellbl indtunk el, akkor mgis van md a korltozs megkerlsre. Hozzuk ltre a C:\documents and settings\scripts mappt s ksztsnk benne egy hello.txt nev szveges fjlt tetszleges tartalommal, majd rendeljk a mapphoz a scripts nev PowerShell-meghajtt!PS C:\> New-PSDrive -name scripts -PSProvider FileSystem -Root 'C:\Documents and Settings\scripts' Name ---scripts Provider -------FileSystem Root ---C:\Documents and Settings\scripts CurrentLoc... -------------

Prbljuk notepad segtsgvel megnyitni a hello.txt fjlt!PS C:\> notepad scripts:\hello.txt

Elg rosszul nz ki, igaz? Az a baj, hogy ilyen esetben a bert tvonalat nem a PowerShell, hanem az elindtott alkalmazs rtelmezi (illetve esetnkben nem rtelmezi). 8 Az eredmny csakis egy szp hibazenet lehet