a windows powershell rejtelmei

36
A Windows PowerShell rejtelmei  Úgy tapasztaltam, hogy nagyon kevesen tudják, hogy mi is az a PowerShell és mire jó, ezért gondoltam, hogy néhány egyszerű, de azért hasznos példán keresztül elmagyarázom a gyakorlati felhasználásának lehetőségeit.   A cikksorozat szl ogenje az lehet ne: szabadul junk ki a grafi kus céleszközök fog ságából, é s valósítsuk meg azokat a funkciókat, amelyeket eddig mindenféle internetről összevadászott, gyakran be azonosíthatatlan forrásból származó segédprogrammal oldottunk meg!  Mi az a PowerShell?  A PowerShell t a Microsoft eleinte a hagyományos D OS -prompt, a parancssor utódjaként aposztrofálta, de aztán egyre inkább egy univerzális rendszerkezel ő, feladatautomatizál ó platformként lett definiálva. Ez azt  jelenti, hogy a PowerShell segítségével oly an, a rendszerüzemeltetésben felhasználható kifejezéseket, kisebb-nagyobb programo kat lehet írni, melyekkel a Microsoft egyre több szoftverét lehet vezérelni.  Nem feltétlenül kell mindenkinek a konzolablakban gépelgetnie mindenfél e parancsot. Lesznek persze ilyenek is (ez a c ikksorozat azt próbálja bemutatni, hogy ez sem ördöngösség, akár otthoni felhasználói is lehetnek a PowerShellnek), lesznek olyanok is, akik mások számára készítenek szkri pteket. Aztán lesznek olyanok is, akik PowerShell-alapú eszközöket használnak, és végül lesznek olyanok, akik a PowerShell képességeit felhasznál va készítenek rendszergazdák számára összetett szoftvereket.   Amikor az Excha nge Server 201 0 grafikus kezel őfelületén katti ntgatunk, akkor a há ttérben PowerShell - utasítások mennek az Exchange Serverhez, amikor a Windows Server 2008 R2 Active Directory  Administr ative Centerét haszn áljuk, akkor szintén powersh ellezünk . Azaz maga a Microsoft is egy olyan platformként használja a PowerShel lt, amellyel rendszergazda eszközöket lehet létrehozni.   A PowerShell tehát egyszerre nagy on sok mi nden: parancssor i eszköz, amel lyel begépel t parancsokkal tudjuk utasítani a számítógépünket, hogy különböző műveletek et elvégezzen. A PowerShell egy programnyel v is, minden ehhez szükséges jellemzővel: ciklussal, v ezérlőutasításokkal, operátorokkal, változókkal, adattípusokkal . A PowerShell a rendszergazdák számára egy olyan eszköz, ami a .N ET keretrendszer profi programozók által létrehozott több ezer osztály objektumait és azok szolgáltatásait elérhetővé teszi. És végül számomra, mint informatikai oktatónak egy olyan, mindenki számára elérhető eszköz, amivel mind a W indows operációs rendszerek belső működését, mind az objektum -orientáltságot, mind a programozást nagyon jól meg lehet tanítani.  

Upload: pasztorlaszlo

Post on 14-Oct-2015

159 views

Category:

Documents


17 download

TRANSCRIPT

  • 5/24/2018 A Windows PowerShell Rejtelmei

    1/36

    A Windows PowerShell rejtelmeigy tapasztaltam, hogy nagyon kevesen tudjk, hogy mi is az a PowerShell s mire j, ezrtgondoltam, hogy nhny egyszer, de azrt hasznos pldn keresztl elmagyarzom a gyakorlatifelhasznlsnak lehetsgeit.

    A cikksorozat szlogenje az lehetne: szabaduljunk ki a grafikus cleszkzk fogsgbl, s valstsuk megazokat a funkcikat, amelyeket eddig mindenfle internetrl sszevadszott, gyakran beazonosthatatlanforrsbl szrmaz segdprogrammal oldottunk meg!

    Mi az a PowerShell?

    A PowerShellt a Microsoft eleinte a hagyomnyos DOS-prompt, a parancssor utdjaknt aposztroflta, deaztn egyre inkbb egy univerzlis rendszerkezel, feladatautomatizl platformknt lett definilva. Ez aztjelenti, hogy a PowerShell segtsgvel olyan, a rendszerzemeltetsben felhasznlhat kifejezseket,kisebb-nagyobb programokat lehet rni, melyekkel a Microsoft egyre tbb szoftvert lehet vezrelni.

    Nem felttlenl kell mindenkinek a konzolablakban gpelgetnie mindenfle parancsot. Lesznek perszeilyenek is (ez a cikksorozat azt prblja bemutatni, hogy ez sem rdngssg, akr otthoni felhasznli islehetnek a PowerShellnek), lesznek olyanok is, akik msok szmra ksztenek szkripteket. Aztn lesznekolyanok is, akik PowerShell-alap eszkzket hasznlnak, s vgl lesznek olyanok, akik a PowerShellkpessgeit felhasznlva ksztenek rendszergazdk szmra sszetett szoftvereket.

    Amikor az Exchange Server 2010 grafikus kezelfelletn kattintgatunk, akkor a httrben PowerShell-utastsok mennek az Exchange Serverhez, amikor a Windows Server 2008 R2 Active DirectoryAdministrative Centert hasznljuk, akkor szintn powershelleznk. Azaz maga a Microsoft is egy olyanplatformknt hasznlja a PowerShellt, amellyel rendszergazda eszkzket lehet ltrehozni.

    A PowerShell teht egyszerre nagyon sok minden: parancssori eszkz, amellyel begpelt parancsokkaltudjuk utastani a szmtgpnket, hogy klnbz mveleteket elvgezzen. A PowerShell egyprogramnyelv is, minden ehhez szksges jellemzvel: ciklussal, vezrlutastsokkal, opertorokkal,vltozkkal, adattpusokkal. A PowerShell a rendszergazdk szmra egy olyan eszkz, ami a .NETkeretrendszer profi programozk ltal ltrehozott tbb ezer osztly objektumait s azok szolgltatsaitelrhetv teszi. s vgl szmomra, mint informatikai oktatnak egy olyan, mindenki szmra elrheteszkz, amivel mind a Windows opercis rendszerek bels mkdst, mind az objektum-orientltsgot,mind a programozst nagyon jl meg lehet tantani.

  • 5/24/2018 A Windows PowerShell Rejtelmei

    2/36

    Az els gyakorlat

    Mindennek demonstrlsra az els feladat az lenne, hogy kicsit tegyk rendbe a szmtgpre ttltttfnykpeinket. A mai digitlisfnykpezgpekben tallhat nagy trolkapacits memriakrtyk mellettgyakran tbb szz fnykpnk is sszegylik a My Pictures knyvtrban, elg nehz kztk tjkozdni.Ebben a cikkben addig jutunk el, hogy a kpeinket havi bontsban trakjuk alknyvtrakba.

    A Microsoft Windows 7 rkezsvel minden ilyen opercis rendszeren ott van a Windows PowerShell. Atbbi, de azrt Windows XP-nl nem rgebbi Microsoft opercis rendszert hasznlk pedig ingyen letlthetik s telepthetik.Nzzk az els lpst, nyissuk meg a PowerShellt, illetve a kezdknek talnknyelmesebben hasznlhat grafikus szerkeszt felletet, a Windows PowerShell ISE-t!

    Ennek a hromosztat ablaknak a fels rszben fogunk dolgozni. A begpelt parancsokat a Run Script(F5) gombbal tudjuk futtatni, az eredmnyek a kzps ablakrszben jelennek meg. Itt a cikkbenflkvrrel jelzem azt, amit a fels ablakrszbe kell gpelni. Mindig csak annyi legyen a fels rszben,

    amennyit n itt jelzek, a korbbi parancsokat mindig trljk ki! Eltr httrsznnel az lthat, ami akimeneti ablakrszben jelenik meg. Ahol nagyon sok sor jelenne meg a kimeneten, ott csak az elsnhnyat msoltam ide.

    http://support.microsoft.com/default.aspx/kb/968929http://support.microsoft.com/default.aspx/kb/968929http://support.microsoft.com/default.aspx/kb/968929
  • 5/24/2018 A Windows PowerShell Rejtelmei

    3/36

    Kezdjnk neki! Felttelezem, hogy a kpek a Pictures knyvtrban tallhatk.

    cd .\Pictures

    dir

    Directory: C:\Users\tibi\Pictures

    Mode LastWriteTime Length Name

    - - - -

    -a- 2009.09.02. 22:58 2525150 P1090919.JPG

    -a- 2009.09.02. 22:58 2256418 P1090927.JPG

    -a- 2009.09.02. 22:58 2278723 P1090998.JPG

    -a- 2009.09.02. 22:59 2499729 P1100022.JPG

    -a- 2009.09.02. 22:59 2526647 P1100042.JPG

    -a- 2009.09.02. 22:59 2282924 P1100125.JPG

    Ez egyelre mg nem tl izgalmas. Azt hisszk, hogy DOS parancsokat hasznlunk, de ez mr szntisztaPowerShell, valjban a cd a Set-Location, a dir pedig a Get-ChildItem PowerShell parancsok "lneve". Azigazi rdekessg ott jn el, ha elkezdnk dolgozni az egyes fjlokkal. Elljrban annyit kell tudni, hogy aPowerShellben minden objektum, hogy vannak lekrdezhet s esetleg trhat tulajdonsgai,smeghvhat metdusai. A metdusok olyan fggvnyek, parancsok, amelyek az adott objektummalkapcsolatban valami rtelmes dolgot hajtanak vgre. A mi kprendezget feladatunk szempontjbl most akpfjl azon tulajdonsga rdekes, ami a mdostsnak dtumt tartalmazza. Nzzk, ezt hogyanrhetjk el egy konkrt fjl esetben:

    (dir .\P1090919.JPG).lastwritetime

    2009-09-02

    A zrjelek kzti rsz egy konkrt fjlt "megragad", majd ennek a fjlnak vesszk a lastwritetimetulajdonsgt. A "pont" karakterrel lehet hivatkozni az objektumok tulajdonsgaira.

    Nekem ebbl az v s a hnap kellene szmokkal kifejezve,szpen egybefzve egy ktjellel, mert ilyennev alknyvtrakba szeretnm rendezni a kpeimet. Szerencsre az elz kimenetet nem szvegknt kellfeldolgoznunk (az elg nehz lenne), hanem erre a PowerShell ksz megoldssal ll rendelkezsnkre.Miutn itt egy dtumrl van sz, elveszem a dtumok kezelst vgz parancsot, a get-date-et smegadom a megfelel formz kifejezst a Format paramternv utn:

    get-date (dir .\P1090919.JPG).lastwritetime -Format "yyyy-MM"

    2009. szeptember 2. 22:52:57

    Ez a formzs teht veszi a dtumbl az vek szmjegyeit (yyyy), egy ktjelet, majd a hnapokszmnak kt szmjegyt (MM itt kivtelesen fontos a nagybet, mert kisbetvel a perceket jelljk).

  • 5/24/2018 A Windows PowerShell Rejtelmei

    4/36

    Na, ez mr egy fjlra mkdik, most nzzk az sszes kpfjlra ezt hogyan tudjuk ezt ellltani:

    dir *.jpg| ForEach-Object {get-date $_.lastwritetime -format "yyyy-MM"}

    2010-02

    2009-09

    2009-09

    2009-09

    ...

    Mi is trtnt itt? A dir-t rtjk, az ebbl kijv fjlobjektumokat tovbbkldjk a "futszalagon" (| jel) tovbbifeldolgozsra. Ezen feldolgozs keretben minden egyes futszalagon rkez objektumra a Foreach-Object parancs segtsgvel legenerltatjuk az elbb mr ltott mdszerrel az v-h formtum szmsort.Az ppen aktulis futszalagon rkez objektumra, jelenesetben fjlra, a $_ jellel tudunk hivatkozni.Fontos, hogy a ForEach-Object utni kifejezs kapcsos zrjelben van, ennek fontos szerepe van, amiremajd egy kvetkez cikkben trek ki.

    Ezutn alaktsuk tovbb a kis programunkat! Ebben a lpsben ellenrizzk, hogy v-h formtumalknyvtr mr ltezik-e? Ezt a Test-Path PowerShell paranccsal lehet megtenni. Ennek mkdsnekfeldertsre vegynk fel egy alknyvtrt ide, a fnykpek knyvtrba, mondjuk "egyb" nvvel. Ez utnellenrizzk, hogy ez mit ad eredmnyl:

    Test-Path ".\egyb"

    True

    Ez egy nem ltez knyvtrra False eredmnyt fog adni. Neknk meg pont ekkor kellene alknyvtrt

    ltrehozni, amikor ez a vizsglat hamis eredmnyt ad. Programozsban jl ismert az IF vezrlszerkezet,mellyel akkor lehet vgrehajtatni valamit, amikor egy felttel igaznak rtkeldik. Neknk hamis eredmnytad a Test-Path, amikor tennivalnk lenne, gy fordtani kell a kirtkels eredmnyn, amit a Test-Patheredmnynek neglsval tudjuk elrni, amit a PowerShellben a felkiltjellel tudunk jelezni. Mindezzelegytt az If szerkezet gy nz ki:

    If(!neglandfelttel){vgrehajtand kd}

    Knyvtrat a New-Item paranccsal tudunk ltrehozni, a kvetkez formtumban:

    New-Item Path hovaItemType Directory

    Fjlt tmozgatni a Move-Item paranccsal tudunk, melynek szerkezete a kvetkez:

    Move-Item Path Destination clknyvtr

    Mg annyit tegynk meg, hogy az alknyvtrnevet tegyk be egy vltozba, hiszen ezt tbbszr is felfogjuk hasznlni: az alknyvtr megltnek ellenrzsekor, az esetlegesen ltrehozand j knyvtresetben s a kp tmozgatsnak clknyvtraknt. Vltozneveket a PowerShellben egy $ jellel kellkezdeni. A PowerShellben akr kezetes karaktereket is alkalmazhatunk vltoznevekben.

  • 5/24/2018 A Windows PowerShell Rejtelmei

    5/36

    A teljesen sszerakott kis "program" gy nz ki:

    cd $HOME\pictures

    dir *.jpg | ForEach-Object {

    $alknyvtr = get-date $_.lastwritetime -Format "yyyy-MM"

    if(! (Test-Path -Path ".\$alknyvtr")) {

    New-Item -Path ".\$alknyvtr" -ItemType Directory}

    Move-Item -Path $_.pspath -Destination ".\$alknyvtr"

    }

    Mit is lthatunk itt? Az elejn biztos, ami biztostlpnk a kpek knyvtrba, nehogy vletlenl msuttlev kpfjlok kztt garzdlkodjunk. A $HOME vltoz tartalmazza a belpett felhasznlmunkaknyvtrt, felttelezsem szerint ennek Pictures alknyvtrban vannak a kpek. Ezutn a JPG

    kiterjeszts fjlokat megragadjuk, rtesszk a futszalagra s bekldjk ket egy ForEach-Object"gpbe". A gpbe beltunk, a bels felpts a kapcsos zrjelek kztt lthat. A gp belsejbenltrehozunk egy alknyvtr nev vltozt, ami a gpbe rkez fjl mdostsi idejbl kpzd ktjelesszmjegyeket tartalmazza. Majd megvizsgljuk,hogy van-e ilyen nev alknyvtr, s ha nincs, akkorltrehozzuk azt. Mire a Move-Item-hez rnk, addigra mr biztos van megfelel alknyvtr, gy az ppenfeldolgozs alatt lev kpfjlt t tudjuk oda helyezni.

    Mik ebben a programban mg az rdekessgek?Pldul az, hogy a PowerShell a vltozkat az idzjelekkztt kifejti, gy a ".\$alknyvtr" kifejezs mindig az aktulis alknyvtrnvvel helyettestdik be a . s / jelutn. Krek mindenkit, hogy a program tesztelst csak olyan fjlokon vgezze, amelyekrl van biztonsgimsolata, mert flregpelsek esetn esetleg olyan helyre mozgatdnak, ahol nehz megtallni azokat.

  • 5/24/2018 A Windows PowerShell Rejtelmei

    6/36

    A Windows PowerShell rejtelmei - 2. rsz

    A Windows PowerShell hasznlatt bemutat cikksorozat msodik rszben szveges llomnyok feldolgozshoz adunk tippeket.

    Acikksorozat els rszbenegy egyszer fjlrendszerez pldn keresztl kezdtem bemutatni aPowerShellt. A cikkhez adott hozzszlsokra reaglva fontosnak tartom hangslyozni, hogy nem akarom

    a PowerShellt ms shellekkel szembelltani. Egyrszt azrt nem, mert nem rtek ms shellekhez, gy nemtartanm ezt korrektnek.

    Msrszt egy ilyen sszehasonltsnak annyi rtelme lenne, mint pldul a magyar s az angol nyelvsszehasonltsnak. Melyik nyelv jobb, szebb, praktikusabb? Ez elg szubjektv dolog, termszetesen alegtbb ember az anyanyelvt tartja a legjobbnak, legszebbnek, nem utolssorban azrt, mert azt tudjalegjobban, azt tanulta meg legelszr. Msrszt nyilvn Angliban praktikusabb az angol, mint a magyar.Ugyanez a helyzet a PowerShellel is: a Windows platformon valszn jobb a PowerShell a tbbi shellnl.Ha csak azt nzzk, hogy szmos Microsoft termk PowerShellel kezelhet, ms shellel nem, akkorszerintem ez elg egyrtelm.

    De trjnk vissza a PowerShellhez! Ebben a pldban mr prblok kevsb szjbargs lenni,felttelezem immr, hogy az olvask zme azrt valamilyen programozsi ismerettel rendelkezik. Amostani pldimban mra knyvemben is alkalmazott jellst hasznlom,azaz itt nem a grafikusPowerShell ISE felleten dolgozom, hanem a karakteres konzolon. Kicsit mg mdostottam a "gyri"prompton, a PS C:\> el bebiggyesztettem egy szgletes zrjelek kzti sorszmot, hogy jobban lehessenhivatkozni ezekre a sorokra.

    Nzzk akkor a kvetkez tmakrt, a szvegfjlban trolt adatok feldolgozst! Vegynk egy kpzeletbelikerkpros versenyt, amelyen hrom kategriban lehet indulni: frfi, n, ifjsgi, ezek klnbz tvokat

    jelentenek. A verseny eredmnyt egy egyszer szveges fjlba rjuk be, legyen a fjl neve bringa.txt:

    Nv, Nem, letkor, Tv, Id

    Brin Gspr, frfi, 15, 45, 1:34:35

    Sos Tibor, frfi, 39, 60, 2:10:34

    Fjdalom Csilla, n, 22, 30, 1:21:11

    Vegetri Jnos, frfi, 35, 60, 1:59:54

    Beld Mrton, frfi, 42, 60, 2:22:10

    Jv va, n, 32, 30, 1:12:05

    Brill Antal, frfi, 16, 45, 1:54:22

    Kerk Pl, frfi, 17, 45, 1:39:54

    Hajt Anna, n, 26, 30, 1:19:32

    Ezeket az adatokat kellene feldolgozni PowerShell segtsgvel. Ha megfigyeljk a szveget, lthat, hogyez valjban egy CSV (comma separated values) adatokat tartalmaz fjl, azaz vesszvel elvlasztott

    rtkek tblzata, az els sorban az oszlopok nevei tallhatk. Az ilyen formtum fjlt a PowerShellnagyon knnyen tudja kezelni:

    http://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.htmlhttp://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.htmlhttp://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.htmlhttp://www.hwsw.hu/hirek/37484/microsoft_powershell_script_szkript_tankonyv_letoltes.htmlhttp://www.hwsw.hu/hirek/37484/microsoft_powershell_script_szkript_tankonyv_letoltes.htmlhttp://www.hwsw.hu/hirek/37484/microsoft_powershell_script_szkript_tankonyv_letoltes.htmlhttp://www.hwsw.hu/hirek/37484/microsoft_powershell_script_szkript_tankonyv_letoltes.htmlhttp://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.html
  • 5/24/2018 A Windows PowerShell Rejtelmei

    7/36

    [4] PS C:\scripts> Import-Csv .\scripts\bringa.txt

    | Format-Table

    Nv Nem letkor Tv Id

    - - - - -

    Brin Gspr frfi 15 45 1:34:35

    Sos Tibor frfi 39 60 2:10:34

    Fjdalom Csilla n 22 30 1:21:11

    Vegetri Jnos frfi 35 60 1:59:54

    Beld Mrton frfi 42 60 2:22:10

    Jv va n 32 30 1:12:05

    Brill Antal frfi 16 45 1:54:22

    Kerk Pl frfi 17 45 1:39:54

    Hajt Anna n 26 30 1:19:32

    Lthat, hogy CSV fjlok beolvassra az Import-CSV cmdlet ll rendelkezsnkre. A PowerShellterminolgiban az "igazi" parancsok neve a cmdlet (ejtsd: kommandlet). Ezek olyan parancsok, amelyeketa PowerShell sajt infrastruktrja biztost, nem pedig valamilyen kls program. Szigor szablyok

    vannak a parancsok elnevezsre, mindannyian ige-ktjel-fnv szerkezetek, radsul a lehetsgesigk is jl behatroltak, gy sok meglepetsre nem kell szmtanunk, radsul elg knnyen kitallhat,akr egy szmunkra ismeretlen parancsrl is, hogy az mit is csinlhat.

    Az Import-CSV pldul beolvassa egy CSV fjl tartalmt s az ottani informcik alapjn ltrehoz specilisobjektumokat olyan tulajdonsgnevekkel, mint ami a fjl els sorban lev elnevezsek. A fentikifejezsem vgn n mg tblzatos nzetben krtem az adatokat a Format-Table cmdlet segtsgvel.Nzzk, hogy a megjelentett sorok tnyleg objektumok, azaz tulajdonsgaik kln-kln megszlthatk:

    [6] PS C:\> $versenyzk = Import-Csv .\scripts\bringa.txt

    [7] PS C:\> $versenyzk[1].id

    2:10:34

    Az egyszersg kedvrt az elbb ltott objektum-halmazt betltm egy $versenyzk vltozba [6] spldul Sos Tibor ideredmnyt kiolvastam [7]. A $versenyzk tmbjnek egyes elemeire szgleteszrjelbe rt szmmal kell hivatkozni, az els elem a 0. elem, gy az n adatsorom az 1. elemben van, sennek az Id tulajdonsga adta meg az ideredmnyemet.

  • 5/24/2018 A Windows PowerShell Rejtelmei

    8/36

    Ezzel mr most sok minden el tudunk vgezni, pldul keressk a kategrinknti gyzteseket:

    [8] PS C:\> $versenyzk | Group-Object -Property tv | ForEach-Object

    {$_.group | Sort-Object -Property id | Select-Object -First 1}

    | Format-Table

    Nv Nem letkor Tv Id

    - - - - -

    Brin Gspr frfi 15 45 1:34:35

    Vegetri Jnos frfi 35 60 1:59:54

    Jv va n 32 30 1:12:05

    Mi trtnt itt? Vettem a versenyzi adatokat s rtettem ket a futszalagra. Az els gp, a Group-Objectcsoportostotta ezeket, "bedobozolta" a Tv tulajdonsg alapjn, ez adja meg az egyes kategrikat.Ennek kimenete olyan csoportobjektumok halmaza, melyek Group nev tulajdonsgn keresztl rhetk elaz adott csoportba tartoz versenyzi adatok, azaz a doboz tartalma. Pillantsunk bele, hogy a gpsor ezenpontjn mi is van a futszalagon, hogyan is nznek ki az gy kpzett dobozok:

    [9] PS C:\> $versenyzk | Group-Object -Property tv

    Count Name Group

    - - -

    3 45 {@{Nv=Brin Gspr; Nem=frfi; letkor=15; .

    3 60 {@{Nv=Sos Tibor; Nem=frfi; letkor=39; T.

    3 30 {@{Nv=Fjdalom Csilla; Nem=n; letkor=22;.

    Lthat, hogy hrom doboz kszlt, egy-egy dobozon, azaz csoporton bell az oda tartoz adatok rkezsisorrendben vannak, nekem pedig idre kellene rendezni ezeket. gy a [8]-as sorban lthat kifejezsbenveszem a csoport-objektumokat egyesvel a ForEach-Object cmdlettel, s azt adom neki utastsba, hogy

    vegye az aktulis csoport elemeit, amelyek teht a Group tulajdonsgon keresztl rhetk el. Ezekethelyezze egy bels, jabb futszalagra, amin rendezze id szerint az adatokat a Sort-Object cmdletsegtsgvel, majd egy-egy csoportbl vegye csak az els elemet, azaz a legkisebb ideredmnnyelrendelkez versenyzt a Select-Object cmdlettel. A legvgn a tblzatos nzetet kiad Format-Table vanismt.

    Fokozzuk ezt! Mi van akkor, ha arra vagyok kvncsi, hogy vajon mi volt a versenyzk tlagsebessge? Ezta legelegnsabban gy tudjuk megtudni, ha ezt egy j tulajdonsgknt hozztesszk az egyes versenyziadatsorokhoz. s ha mr alaktgatunk, akkor legynk mg preczebbek! Valjban itt az idadatokatszvegknt olvasta be a PowerShell, ksztsnk ezekbl igazi, id tpus adatokat. Ezt mr a grafikus

    szkript-szerkesztben raktam ssze, hogy szebb tagolssal tudjamide msolni.

  • 5/24/2018 A Windows PowerShell Rejtelmei

    9/36

    Ezeket a formzott, trdelt sorokat egy az egyben ki lehet innen msolni, s be lehet illeszteni kzvetlenla PowerShell konzolba, a sortrseket s az tlg sorokat teljesen korrektl kezeli a rendszer:

    $versenyzk = @()

    Import-Csv c:\scripts\bringa.txt |

    ForEach-Object {

    $_.Id = [timespan] ($_.id+".0")

    $_ | Add-Member -Name tlagsebessg -MemberType NoteProperty -Value `

    ($_.tv/($_.id.totalhours))

    $versenyzk += $_

    }

    Mi trtnt itt? Elre elksztettem egy $versenyzk nev res tmbt (@() ez a jellse egy res

    tmbnek), majd a mr ltott mdon elkezdem beimportlni az adatokat. Minden egyes adatsorra talaktomaz Id tulajdonsgot "igazi" idv, ehhez a [timespan] tpusjellt hasznltam, de mivel ez szmtana mgtizedmsodpercekre is, ezrt azt mg hozzbiggyesztem a beolvasott adathoz. Ezutn az aktulis elemet($_) kibvtettem egy jabb tulajdonsggal, aminek neve tlagsebessg, tpusa un. Noteproperty, amigyakorlatilag azt jelenti, hogy ez egy statikus adat, rtke pedig a Tv elosztva az elbb kiszmolt Idrkban kifejezett (totalhours) rtkvel.

    Itt mutatkozik meg az idre alakts haszna s a PowerShell tpusossga, mert lthat, hogy milyenegyszerenlehet ezzel az idtartamok klnbz mrtkegysgekben vett rtkt kpezni. A legvgn azadott adatsort beraktam a $versenyzk tmb kvetkez elemeknt. Nzzk, hogy tnyleg benne vannak-e

    az tlagsebessgek, st, rendezzk mindjrt eszerint cskken sorrendbe:

    [26] PS C:\> $versenyzk | Sort-Object -Property tlagsebessg -Descending

    | Format-Table nv, tv, id, tlagsebessg

    Nv Tv Id tlagsebessg

    - - - -

    Vegetri Jnos 60 01:59:54 30,02502085070

    Brin Gspr 45 01:34:35 28,54625550660

    Sos Tibor 60 02:10:34 27,57212152157

    Kerk Pl 45 01:39:54 27,0270270270

    Beld Mrton 60 02:22:10 25,32239155920

    Jv va 30 01:12:05 24,9710982658

    Brill Antal 45 01:54:22 23,60827747012

    Hajt Anna 30 01:19:32 22,63202011735

    Fjdalom Csilla 30 01:21:11 22,17203859577

  • 5/24/2018 A Windows PowerShell Rejtelmei

    10/36

    Hurr! Benne van. A szebb megjelents miatt s most itt csak ngy tulajdonsgot vlasztottam ki atblzatba. s mg mindig lehet fokozni! Hogyan lehetne pldul kiszmolni, hogy a versenyzk sszesenhny kilomtert tekertek, mi volt az tlagos hossz, legkisebb s legnagyobb tv s hny versenyz volt:

    [30] PS C:\> $versenyzk | Measure-Object -Sum -Average -Maximum

    -Minimum Property tv

    Count : 9

    Average : 45

    Sum : 405

    Maximum : 60

    Minimum : 30

    Property : Tv

    Ht ez nem volt tl bonyolult! Miutn ilyen jelleg egyszer statisztikk nagyon gyakoriak, ezrtaPowerShell alkoti adtak egy beptett cmdletet, a Measure-Object-et, ami megadott tulajdonsgra ezeketa statisztikai adatokat kiszmolja. Lthat pldul, hogy 9 versenyzm volt, sszesen 405 km-t tekertek saz tlagtv pont 45 km volt.

  • 5/24/2018 A Windows PowerShell Rejtelmei

    11/36

    A Windows PowerShell rejtelmei - 3. rsz

    Harmadik rszhez rkezett a Microsoft Windows parancssort bemutat cikksorozat. Ebben olyanmegoldsi tletek tallhatk, amelyek a rendszergazdk htkznapi zemeltetsi feladataiban is jlhasznosthatk, pldul objektumok sszehasonltsa vagy adatok letltse az internetrl.

    A PowerShellt bemutat cikksorozat harmadik rszben az sszehasonltssal fogok foglalkozni. Korbban

    mr volt rla sz, hogy a PowerShellben objektumokkal dolgozunk, radsul ltalban nem is egy-egyobjektummal, hanem egyszerre tbbel, n. objektumgyjtemnyekkel. Az els cikkben sok kpfjl-objektumot dolgoztam fel, a msodikban sok szvegsor-objektumot. Nagyon sok olyan problma van,melyek megoldshoz ilyen objektumgyjtemnyek sszehasonltsa rvn juthatunk el. Most egy ilyenfeladatot fogok itt megoldani a PowerShell segtsgvel, lotttippeket rtkelek ki. A kvetkez cikkben mrolyan pldkat hozok az sszehasonltsokra, melyek a rendszergazdknak jelenthetnek segtsget: ktegyformnak hitt szmtgp szoftveres klnbsgeit dertem fel.

    Letlthet PowerShell-knyv s vetlked

    Mieltt belekezdenk a cikk tmjba pr szolglati kzlemnyt engedjenek meg! Az online mdiumokkzl elsknt a HWSW olvasi rteslhetnek arrl, hogy mr szabadon letlthet aPowerShell 2.0elmlet s gyakorlat rendszergazdknakcm knyvem a Microsoft Magyarorszg jvoltbl. Msodik hr,hogy nemsokra indul a Microsoft Scripting Games 2010 vetlkedje, lesz kezd s halad szekci is, gybrki btran indulhat. Ehhez"edztbort" is szerveztem,tz gyakorl feladatot lehet itt tallni. Ha ezek kzlmegoldanak feladatokat s a megoldsokat eljuttatjk hozzm, akkor rtkelem azokat s majd a"hivatalos" megoldsokatis kzzteszem. A legtbb, legszebb megoldst bekldnek Microsoft Pressszakknyv a nyeremnye. Biztatok mindenkit, aki rdekldik a PowerShell irnt, hogy vegyen rszt azedztborban, nzze meg a korbbi vek feladatait s megoldsait s induljon az id ei Scripting Gamesbajnoksgon, nagyon sokat lehet tanulni s ott jval rtkesebb djak is vrnak a nyertesekre!

    Lottzzunk a PowerShell segtsgvel!

    Nha veszek lottszelvnyt s ha mr erre vetemedek, akkor nem is egy szmsorral, hanem 3-4-eljtszom. Viszont a kirtkels nem olyan egyszer, mert a kihzott szmokat szpen egyesvel ssze kellhasonltani a tippek szmsoraival, ami elg sok sszehasonltgatst ignyel. Hogyan tudna ebben aPowerShell segteni? Vegynk elszr csak egy tippsort s a tnylegesen hzott szmokat, s hasonltsukssze ezeket az objektumgyjtemnyek sszehasonltsra szolgl Compare-Object cmdlet segtsgvel:

    http://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdfhttp://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdfhttp://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdfhttp://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdfhttp://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdfhttp://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdfhttp://www.iqjb.hu/PSEdzes.phphttp://www.iqjb.hu/PSEdzes.phphttp://www.iqjb.hu/PSEdzes.phphttp://www.iqjb.hu/PSEdzes.phphttp://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdfhttp://download.microsoft.com/download/5/8/8/5886EEB0-BFB5-4854-9D17-AAEDE66825D3/konyvek/PowerShell_v2/Microsoft_Powershell_2_konyv.pdf
  • 5/24/2018 A Windows PowerShell Rejtelmei

    12/36

    [1] PS C:\> Compare-Object 28,38,55,68,82 10,20,30,40,55

    InputObject SideIndicator

    - -

    10 =>

    20 =>

    30 =>

    40 =>

    28

  • 5/24/2018 A Windows PowerShell Rejtelmei

    13/36

    Ha csak azt szeretnm ltni, hogy mik az eltallt szmok, arra kicsit kell csak mdostani a fenti kifejezst:

    [3] PS C:\> Compare-Object 28,38,55,68,82 10,20,30,40,55

    -ExcludeDifferent -IncludeEqual | ForEach-Object {$_.inputobject}

    55

    Ha meg arra vagyok kvncsi, hogy hny tallatom van, akkor ennek a szmossg tulajdonsgt kelllekrnem:

    [4] PS C:\> (Compare-Object 28,38,55,68,82 10,20,30,40,55

    -ExcludeDifferent -IncludeEqual | ForEach-Object {$_.inputobject}).count

    [5] PS C:\>

    Hopp! Ez nem adott semmit. Azrt, mert itt csak egy tallatom volt. Ha kett lett volna, akkor mkdttvolna:

    [5] PS C:\> (Compare-Object 28,38,55,68,82 10,20,30,68,55

    -ExcludeDifferent -IncludeEqual | ForEach-Object {$_.inputobject}).count

    2

    Vajon mirt? Mert az egsz sszehasonltsnak a kimenete is objektum, csakhogy ez egy tallat esetbenmaga az egy darab szm, s a szmnak nincs "count" tulajdonsga. Mg ha tbb tallatom volt, akkor akimenet egy gyjtemny, annak mr van "count tulajdonsga. De nem baj, szerencsre van egy olyanjells a PowerShellben, ami garantlja, hogy mindig gyjtemny legyen a kimenet, mg akkor is, ha csakegy elem van benne. Ezt egy @() zrjelezssel tudjuk elrni:

    [6] PS C:\> @(Compare-Object 28,38,55,68,82 10,20,30,40,55

    -ExcludeDifferent -IncludeEqual | ForEach-Object {$_.inputobject}).count

    1

  • 5/24/2018 A Windows PowerShell Rejtelmei

    14/36

    s termszetesen ez kt tallatnl is tovbbra is tkletesen mkdik:

    [7] PS C:\> @(Compare-Object 28,38,55,68,82 10,20,30,68,55

    -ExcludeDifferent -IncludeEqual | ForEach-Object {$_.inputobject}).count

    2

    Ennek birtokban kszthetnk egy sajt PowerShell cmdlet-szersget, aminek paramterknt tadva ktszmsort kirja, hogy hny egyez szm van kztk s hogy melyek ezek. Ezt fggvnydefinilssaloldhatjuk meg. Most ide a grafikus szkriptszerkesztbl van msolva, de egy az egyben bemsolhat akonzolablakba is s vgs Enter letsvel ltrejn a fggvnydefinci:

    function ellenriz-tipp {

    param (

    [int[]] $hzottak,

    [int[]] $tippek)

    $tallat = @(

    Compare-Object $hzottak $tippek -IncludeEqual -ExcludeDifferent |

    ForEach-Object {$_.inputobject})

    Write-Host "$tippek : " -NoNewline

    if($tallat) {

    write-host "Tallat: $($tallat.count), eltallt szmok: $tallat"

    }

    else {write-host "Nincs tallat"}

    }

    A fggvny neve az, hogy "ellenriz-tipp". Kt paramtert vr, az els a "hzottak", a msodik a "tippek".Mindkett egsz szmok gyjtemnye. A fggvny belsejben az elbb kitallt mdon a $tallat vltozbateszem az eltallt szmokat, majd kirom a kpernyre elszr a tippknt megadott szmokat, majdaszerint, hogy volt-e tallat, mg mell rom, hogy hny tallat volt s melyek azok. Klnben meg azt romki, hogy "Nincs tallat".

  • 5/24/2018 A Windows PowerShell Rejtelmei

    15/36

    Nzzk, hogyan mkdik ez:

    [9] PS C:\> ellenriz-tipp 28,38,55,68,82 10,20,30,40,55

    10 20 30 40 55 : Tallat: 1, eltallt szmok: 55

    [10] PS C:\> ellenriz-tipp 28,38,55,68,82 10,20,30,68,55

    10 20 30 68 55 : Tallat: 2, eltallt szmok: 68 55

    [11] PS C:\> ellenriz-tipp 28,38,55,68,82 10,20,30,40,50

    10 20 30 40 50 : Nincs tallat

    Irny az internet!

    Mi van azokkal a jtkfggkkel, akik tbb tucat szmsorral jtszanak? k az egyszersg kedvrt egyszveges fjlba berhatjk a tippsoraikat s a PowerShell onnan is be tudja olvasni azokat, sautomatikusan kirtkeli az sszes tippsort. De csavarjunk mg egyet a dolgon! n mr a hzott szmokatis lusta vagyok begpelni, szedje ssze ezeket a PowerShell az internetrl! Sajnos a "hivatalos" lottoldalon nagyon bonyolultan vannak fent a nyerszmok, dea Teletipp weboldalrl knnyebben le lehetszedni ezeket. Az ezt elvgz fggvny gy nz ki:

    function get-lotto {$wc = New-Object net.WebClient

    $oldal = $wc.DownloadString("http://www.teletipp.hu/")

    $keres1 = '5/90\stslott\r\n'

    $keres2 = '(\d+\.\sjtkht\s\d{4}\.\d{2}\.\d{2}\.)'

    $keres3 = '\r\n'

    $keres4 = '(\d{1,2},\d{1,2},\d{1,2},\d{1,2},\d{1,2})'

    if($oldal -match ($keres1 + $keres2 + $kerese3 + $keres4))

    {

    Write-host $Matches[1]

    $Matches[2] -split ","

    }

    }

    Ne ijedjen meg senki, nem olyan bonyolult, mint amilyennek ltszik. Ennek a get-lotto fggvnynek nincs isparamtere. A webes elrs nagyon egyszer, a PowerShell alatt ott a .NET keretrendszer s abban mrvr rnk egy olyan osztly, ami egyszer webbngszst vgez. Ez az osztly a System.Net.WebClientnvre hallgat, a PowerShellben nem kell kirni a System eltagot. Ennek az osztlynak egy objektumt

    hozom ltre a $wc vltozba a New-Object cmdlet segtsgvel, s ennek a DownloadString metdusvaltltm le a Teletipp oldalt. Ez egy nagy, tbbsoros szveget ad, a weboldal HTML forrskdjt, ebben kellcsak megkeresni az tslott szmait tartalmaz rszt.Hogy hogyan, azt az "igazi" bngsznk forrskdmegjelentjnek segtsgvel tudjuk megalkotni:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    16/36

    A kiemelt rsz kell neknk. Ezt idtll mdon egy regex kifejezs segtsgvel tudjuk megtallni. A kereskifejezst ngy rszbl, a $keres1 - $keres4-bl raktam ssze, de csak azrt, hogy knyelmesen kifrjen akpernyre. A lnyege az, hogy keresem azt a szveget, hogy "5/90 tslott..." ( a szkzt \s-sel, asortrst \r\n-nel jelljk regexben). Ezt mg knny megtallni, de ezutn jn egy olyan rsz, ami htrl-htre ms. Ez szerencsre a regexnek nem okoz gondot! A $keres2-ben azt fogalmazom meg, hogykeresek legalbb egy szmjegyet (\d+), utna legyen egy szkz, majd az, hogy "jtkht", majd megintcsak 4 s 2 szmjegyekbl, valamint vesszkbl ll dtum. A nyerszmok meg a $keres4 kifejezsselkereshetk, szintn szmjegyek s vesszk formjban. (Bvebben a knyvemben.)

    A nekem kell rszeket, azaz a jtkht adatait s magukat a nyerszmokat zrjelezssel kiemelem, gymajd a vgstallatbl ezekre kln is hivatkozhatok. Az $oldal vltozban tallhat HTML forrsbanmegkeresem teht az elbb sszerakott keres kifejezssel a nekem rdekes rszt, erre a PowerShellbena match opertor ll rendelkezsnkre. Ha megtallta a teljes keresett kifejezst, akkor a tallat a$Matches automatikus vltozba kerl. Ez valjban egy gyjtemny-szersg, ennek [0]-s eleme lennea teljes tallat (lsd a kpernykp kiemelt rszt), de ez nekem pont nem kell. Ami kell, az ennek [1]-eseleme, a jtkht adatai (az els bezrjelezett rsz, azaz a $keres2-re illeszked szveg), amit ki is rok akonzolra, valamint a [2]-es eleme, maguk a nyerszmok ($keres4-nek megfelel rsz), ez lesz a fggvnyvisszatrsi rtke, ezt csak "simn" kiadom. Nzzk,hogyan mkdik ez:

    [16] PS C:\> get-lotto

    13. jtkht 2010.04.03.

    28

    38

    55

    68

    82

    http://www.hwsw.hu/kepek/hirek/2010/04/teletipp.jpg
  • 5/24/2018 A Windows PowerShell Rejtelmei

    17/36

    Most mr csak ssze kell hozni a kt fggvnyt s a fjlba lerakott tippjeimet fel kell olvasni:

    [20] PS C:\> $hzs = get-lotto

    13. jtkht 2010.04.03.

    [21] PS C:\> $hzs

    28

    38

    55

    68

    82

    [22] PS C:\> Get-Content c:\_munka\tippek.txt | ForEach-Object

    {ellenriz-tipp $hzs ($_ -split ",")}

    11 27 34 53 87 : Nincs tallat

    5 10 14 39 70 : Nincs tallat

    1 26 42 68 82 : Tallat: 2, eltallt szmok: 68 82

    A [20]-as sorban a $hzs vltozba betltm az aktulis nyerszmokat. Amikor kirom a $hzs vltozt

    lthat, hogy maga a cmke, azaz hogy "13. jtkht..." nem kerlt bele, mert a fggvnyben az nemvisszatrsi rtk volt, csak kpernyre kirats. Azutols kifejezs a [22]-es sorban remlem mr rthet!Beolvasom a tippek.txt fjlt, amiben soronknt vesszvel elvlasztva vannak a tippek. Ezekkel atippsorokkal meghvom az "ellenriz-tipp" fggvnyemet, aminek els paramtere a $hzs vltoz, amibeelbb tltttem be a nyerszmokat, msodik paramtert, a tippjeimet meg a szvegfjl aktulis sornakvesszk mentn trtn feldarabolsa utn kapom (-split opertor). A kimenetben ltszik, hogy kttippsoromban nem volt tallat, egy tippsoromban meg kttallat volt. (Sajnos ezt is csak a plda kedvrt"hamistottam", valjban nem volt egy tallatom sem.)

  • 5/24/2018 A Windows PowerShell Rejtelmei

    18/36

    A Windows PowerShell rejtelmei - 4. rsz

    A Windows PowerShellt bemutat cikksorozat negyedik rszben megmutatom, hogyan tudjk arendszergazdk objektumok sszehasonltsval megtallni egy rejtlyesen mkd PC hibit.

    gretemhez hven ebben a rszben tovbb folytatom az objektumok sszehasonltst. A rendszergazdkgyakori problmja, hogy kt ugyanolyannak felttelezett szmtgp mgsem ugyangy viselkedik. Ennek

    szmos oka lehet: eltr hardver, eltr szoftveres belltsok, ms fut alkalmazsok, ms teleptettszolgltatsok, melyek feldertse nem tl egyszer feladat. Ebben a cikkben megmutatom, hogy aPowerShell ebben is tud neknk segteni, szertegaz jelentseket llthatunk ssze, akr tvoli gpekrlis, drga rendszerfelgyeleti szoftverek nlkl.

    A vizsglat mdszere az lesz, hogy kivlasztok egy referencia-szmtgpet, ami szerintem idelisanmkdik, s ehhez hasonltom a felttelezetten ugyanolyan, de mgis eltr teljestmnyt nyjt gpet.Elsknt dertsk fel a kt gpen fut folyamatok kzti klnbsgeket! A fut folyamatokat a Get-Processcmdlet segtsgvel krdezhetjk le, de ha megadjuk a ComputerName paramtert, nem csak arrl agprl, ahol futtatjuk a parancsot, hanem tvoli gprl is. Radsul egyszerre tbb gpnevet adhatunk t

    ennek a ComputerName paramternek, gy a kimeneten az sszes rintett gp folyamatait lthatjuk. Mostitt prbaknt csak a "c" betvel kezdd nev folyamatokat trkpezem fel a DC s a Member nevszmtgpeimen:

    [1] PS C:\> Get-Process c* -ComputerName DC, Member

    Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName

    - - - - - - - -

    41 6 1616 4208 49 1156 conhost

    35 5 1536 4048 47 0,20 2720 conhost

    421 11 1768 3532 42 1,84 312 csrss

    344 10 1792 3616 42 328 csrss

    179 11 1768 6524 110 22,27 360 csrss

    144 10 1564 4460 41 368 csrss

    Termszetesen ez csak akkor mkdik, ha rendszergazda jogosultsgom van a megfigyelt gpeken. Hogyazt is lssuk, hogy ez eredmny egyes sorai melyik gprl rkeztek, testre szabom a megjelen tblzatota Format-Table cmdlettel, a folyamat neve mellett megjelentem a gp nevt is:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    19/36

    [2] PS C:\> Get-Process c* -ComputerName DC, Member | Format-Table

    ProcessName, machinename

    ProcessName MachineName

    - -

    conhost Member

    conhost DC

    csrss DC

    csrss Member

    csrss DC

    csrss Member

    Lthat teht, hogy vegyesen vannak a kt gprl rkezett adatok. Az egyszersg kedvrt mindkt gpfolyamatainak objektumait beteszem egy $all vltozba, majd kpzem az sszehasonltsban rsztvevkt gp szolgltats-kupact egy-egy MachineName tulajdonsgra val szrssel. Ezt a kt kupacot adomt az elz cikkben mr ltott Compare-Object-nek a Name paramter alapjn trtn sszehasonltsra:

    [3] PS C:\> $all = Get-Process -ComputerName DC, Member

    [4] PS C:\> Compare-Object ($all | Where-Object {$_.machinename -eq "DC"})

    ($all | Where-Object {$_.machinename -eq "Member"}) -Property Name

    name SideIndicator

    - -

    svchost =>

    dfsrs

  • 5/24/2018 A Windows PowerShell Rejtelmei

    20/36

    olvas, hogy vajon mirt nem kt kln Get-Process-t hvok meg a kt gpre, s azokat egymssalhasonltom ssze? A vlasz az, hogy ebbl a formbl kiindulva sokkal knnyebb ezt a vizsglatotltalnostani olyan irnyba, hogy a referenciagp mellett ne is egy vizsglt gp legyen, hanem egyszerresok, gy egy kifejezssel akr tbb gp elemzst is el tudjuk vgezni.

    Bonyolultabb a helyzet a rendszerszolgltatsok sszehasonltsval. Azt, hogy mik a kt gpre teleptettszolgltatsok kzti eltrsek, az elzek analgijval ugyanilyen mdon fel lehet derteni, csak a Get-

    Process cmdlet helyett a Get-Service-t kell hasznlni. Ami kicsit nehezebb, az annak megllaptsa, hogymelyek azok a szolgltatsok, amelyek ugyan mindkt gpen teleptve vannak, de az egyik gpen elvannak indtva, mg a msikon nem. Induljunk el itt is mindkt gp sszes szolgltatsnaksszegyjtsvel:

    [11] PS C:\> $all = Get-Service -ComputerName DC, Member

    [12] PS C:\> $all

    Status Name DisplayName

    - - -

    Running ADWS Active Directory Web Services

    Stopped AeLookupSvc Application Experience

    Stopped AeLookupSvc Application Experience

    Stopped ALG Application Layer Gateway Service

    Stopped ALG Application Layer Gateway Service

    ...

    Ezekbl hagyjuk meg azokat a szolgltatsokat, amelyek mindkt gpen teleptve vannak. Eztlegegyszerbben a szolgltatsobjektumok nv szerinti csoportostsval s az gy kapott csoportok kzla ktelemek kivlogatsval tudjuk megkapni:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    21/36

    [16] PS C:\> $all | Group-Object -Property servicename | where-object

    {$_.count -eq 2}

    Count Name Group

    - - -

    2 AeLookupSvc {System.ServiceProcess.ServiceController, S...

    2 ALG {System.ServiceProcess.ServiceController, S...

    2 AppIDSvc {System.ServiceProcess.ServiceController, S...

    2 Appinfo {System.ServiceProcess.ServiceController, S...

    2 AppMgmt {System.ServiceProcess.ServiceController, S...

    ...

    Emellett mg azt is meg kell nzni, hogy a ktelem csoportok kzl melyek azok, ahol a csoporton bellikt szolgltatsobjektum sttusza nem egyforma (group[0] s group[1] tulajdonsgban trolt elem):

    [19] PS C:\> $all | Group-Object -Property servicename | where-object

    {$_.count -eq 2 and $_.group[0].status -ne $_.group[1].status}

    Count Name Group

    - - -

    2 PolicyAgent {System.ServiceProcess.ServiceController, S...

    2 TrkWks {System.ServiceProcess.ServiceController, S...

    2 vds {System.ServiceProcess.ServiceController, S...

    Ezutn a csoportokat ki kell csomagolni,hogy jra szolgltatsobjektumokat kapjunk, ne pedig

    csomagobjektumokat, s ezek kzl ki kell szrni csak a vizsglt gpre vonatkoz adatokat. Akicsomagolst a Select-Object cmdlet ExpandProperty kapcsolval jelzett zemmdjval tudjuk megtenni:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    22/36

    [18] PS C:\> $all | Group-Object -Property servicename | where-object

    {$_.count -eq 2 and $_.group[0].status -ne $_.group[1].status} |

    Select-Object -ExpandProperty group | where-object

    {$_.machinename -eq "Member"}

    Status Name DisplayName

    - - -

    Running PolicyAgent IPsec Policy Agent

    Running TrkWks Distributed Link Tracking Client

    Stopped vds Virtual Disk

    Ebben a vgeredmnyben pldul az lthat, hogy br mindkt gpen szerepel a PolicyAgent szolgltats,ez a vizsglt gpemen fut, de a referencia gpemen ez nem fut, hiszen a szrs miatt ott ms kell legyen aszolgltats llapota. A msik sszehasonltsra igazn j terep a Windowsos szmtgpek WMIadatbzisa, azaz a Windows Management Instrumentation szolgltats ltal kezelt, a gpek legfontosabbadatait tartalmaz adatbzisa. Ezen bell is a legalapvetbb informcit a Win32_ComputerSystem osztly(tbla) tartalmazza, amit PowerShell segtsgvel nagyon egyszeren tudjuk kiolvasni. Nzzk egyelreegy gpre hogyan is megy ez:

    [23] PS C:\> Get-WmiObject -Class Win32_ComputerSystem

    Domain : r2.dom

    Manufacturer : innotek GmbH

    Model : VirtualBox

    Name : DC

    PrimaryOwnerName : Windows User

    TotalPhysicalMemory : 1073274880

  • 5/24/2018 A Windows PowerShell Rejtelmei

    23/36

    Az gy lthat kimenet nem tartalmazza az sszes adatot, minden adat megjelentshez hasznlhatjuk aFormat-List cmdletet a * paramterrel:

    [24] PS C:\> Get-WmiObject -Class Win32_ComputerSystem | Format-List *

    ...

    Manufacturer : innotek GmbH

    Model : VirtualBox

    NameFormat :

    NetworkServerModeEnabled : True

    NumberOfLogicalProcessors : 1

    NumberOfProcessors : 1

    OEMLogoBitmap :

    OEMStringArray :

    PartOfDomain : True

    PauseAfterReset : -1

    PCSystemType : 2

    PrimaryOwnerContact :

    PrimaryOwnerName : Windows User

    ResetCapability : 1

    ResetCount : -1

    ResetLimit : -1

    Roles : {LM_Workstation, LM_Server, Primary_Domain_C

    ontroller, Timesource...}

    SupportContactDescription :

    SystemStartupDelay :

    SystemStartupOptions :

    SystemStartupSetting :

    SystemType : x64-based PC

    TotalPhysicalMemory : 1073274880

    ...

    Ez elg sok tulajdonsgot tett lthatv, gy ersen megvgtam, hogy ne legyen tl hossz. Az opercis

    rendszer s a szmtgp legfontosabb adatait lthatjuk. Neknk most nem is nmagban ez a soktulajdonsg az rdekes, hanem kt szmtgp ilyen jelleg tulajdonsgai kzti eltrsek. Ezt azsszehasonltst nem annyira trivilis elvgezni, mert mg objektumok kupacait a Compare-Objectcmdlettel ssze tudjuk hasonltani, addig sajnos tulajdonsgok sszehasonltsra Compare-

  • 5/24/2018 A Windows PowerShell Rejtelmei

    24/36

    ObjectProperty cmdlet nincs. De kszthetnk ilyet! Az alaptlet az, hogy vesszk ezeket a tulajdonsgokategyesvel, s egy-egy tulajdonsgnv s rtk prbl j objektumokat ptek ssze. De nzzk eztlpsrl-lpsre!

    [26] PS C:\> $wmiobj = Get-WmiObject -Class Win32_ComputerSystem

    [28] PS C:\> $wmiobj | Get-Member -MemberType properties |

    ForEach-Object {"$($_.name) : $($wmiobj.($_.name))"}

    AdminPasswordStatus : 3

    AutomaticManagedPagefile : True

    AutomaticResetBootOption : True

    AutomaticResetCapability : True

    BootOptionOnLimit :

    BootOptionOnWatchDog :

    BootROMSupported : True

    BootupState : Normal boot

    Caption : DC

    ChassisBootupState : 2

    CreationClassName : Win32_ComputerSystem

    ...

    A fenti lpssorral elszr kpeztem a $wmiobj vltozba a gpem WMI tulajdonsgait, majd ezeknekvettem a tulajdonsg (property) tpus tagjellemzit a Get-Member cmdlettel. Ezeket a tagjellemzket sorrakirattam tulajdonsg neve: tulajdonsg rtke formtumban egy Foreach-Object "ciklussal". Mivel nekemnem az a clom, hogy kirjam ezeket az adatokat, hanem ssze szeretnm hasonltani ezeket egy msikgp hasonl adataival, ezrt kpezek inkbb egy j, egyedi PSObject tpus objektumot bellk a New-Object cmdlet segtsgvel. Ez azrt j, mert ezt a fajta objektumot n szabadon felruhzhatomtulajdonsgokkal:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    25/36

    [30] PS C:\> $wmiobj | Get-Member -MemberType properties | ForEach-Object

    { new-object -TypeName PSObject -Property @{name = $_.name;

    DC = $wmiobj.($_.name)}}

    name DC

    - -

    AdminPasswordStatus 3

    AutomaticManagedPagefile True

    AutomaticResetBootOption True

    AutomaticResetCapability True

    BootOptionOnLimit

    BootOptionOnWatchDog

    BootROMSupported True

    Ezzel a Property paramter mellett tadott kifejezssel gyakorlatilag oszlopneveket kpeztem az jobjektumom tulajdonsgaival: "name" lett a WMI tulajdonsgok nevei felett, a "DC" pedig az elskntvizsglt gp neve, s alatta vannak ennek a gpnek a WMI tulajdonsgrtkei.Ehhez majd hozz lehetbiggyeszteni a msodik gp WMI tulajdonsgrtkeit egy jabb oszlopba, gy az sszehasonlts nagyonegyszerv vlik. A msodik gp adatainak hozzillesztse az Add-Member cmdlettel lehetsges: egyegyszer cmke tpus (noteproperty) adatot teszek hozz az objekumomhoz, melynek rtke pont a msikgp ugyanolyan nev WMI tulajdonsga.

    Az eredmnybl azokat a sorokat (objektumokat) kell csak megjelenteni, amelyeknl a kt gpnlkiolvasott tulajdonsgrtkek nem egyformk, valamintrdemes a WMI bels adatbrzolshozszksges mezket is elrejteni. Ez utbbiak neve kt alhzs karakterrel kezddik, gy ez alapjnszrhetk. A teljes megoldsbl ksztettem egy fggvnyt, ami referencia- s tesztgp nevvelparamterezhet:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    26/36

    function compare-computersystem ([string] $referencia, [string] $teszt) {

    $c1 = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $referencia

    $c2 = Get-WmiObject -Class Win32_ComputerSystem -ComputerName $teszt

    $ct = $c1 | Get-Member -MemberType Properties |

    ForEach-Object {

    new-object -typename PSObject -property @{

    name = $_.name; $referencia = $c1.($_.name)}}

    $ct |

    ForEach-Object {

    add-member -inputobject $_ -MemberType NoteProperty `

    -Name $teszt -Value $c2.($_.name)}

    $ct | where-object {

    $_.$teszt -ne $_.$referencia -and $_.name -notlike "__*"}

    }

    A fggvny fejlce utn kt kln vltozba ($c1, $c2) kpzem a gpek WMI adatait. Lthat, hogy ezt islehet tvoli mdon meghvni. Ezutn kpzem a korbban mr mutatott tblzat els gp adatait tartalmazrszt a $ct vltozba. Majd jra elveszem ezt a vltozt, s minden egyes sorhoz hozzillesztem a

    msik gp WMI adatt. A legvgn megszrm az eredmnyt olyan sorokra, ahol eltr a kt gptulajdonsgrtke s a tulajdonsg neve nem kt alhzs-karakterrel kezddik. Nzzk, mi lesz azeredmny, ha ezt meghvom:

    [50] PS C:\> compare-computersystem dc member | Format-Table -Wrap

    name dc member

    - - -

    Caption DC MEMBER

    DNSHostName dc MEMBER

    DomainRole 5 3

    Name DC MEMBER

    Roles {LM_Workstation, LM_Serve {LM_Workstation, LM_Serve

    r, Primary_Domain_Control r, NT, Server_NT}

    ler, Timesource...}

    TotalPhysicalMemory 1073274880 838393856

  • 5/24/2018 A Windows PowerShell Rejtelmei

    27/36

    A kimenetbl az ltszik, hogy az eltr neveken kvl a szmtgpeim esetleges eltr viselkedst azeltr szerverszerepek (egyik tartomnyvezrl, a msik tagkiszolgl) s az eltr fizikai memria mreteokozza. Termszetesen ez csak egy kis demkrnyezet eredmnye, nem lett volna nehz ezt aklnbsget szabad szemmel is szrevenni, de ugyanezzel a megoldssal akr egy sokgpeskrnyezetben is eredmnyhez jutunk, amit manulisan csak nagyon idignyesen tehetnnk meg.Mindebbl az ltszik, hogy nhny soros PowerShell-kifejezsekkel sszetett elemzseket vgezhetnkszmtgp-parkunkban. Miutn ezek a kifejezsek tvolrl is meghvhatk, gy akr az Active Directory

    adatbzisban trolt gpnevek alapjn teljes felmrst kszthetnk az eltrsek feldertsre.

  • 5/24/2018 A Windows PowerShell Rejtelmei

    28/36

    A Windows PowerShell rejtelmei - 5. rsz

    Egyelre a PowerShell cikksorozat utols rszhez rkeztnk. Ebben a rszben bepillantst adok aPowerShell kt legfontosabb kt bvtmoduljnak, az Active Directorynak s a Group Policynak akpessgeibe.

    Csoporttagsgok rekurzv feldertse

    Sok olyan feladat addik a rendszergazdk munkja kzben a felhasznlkkal s a szmtgp-krnyezetk belltsaival kapcsolatban, amelyre a grafikus rendszergazda eszkzk nem adnakmegoldst. Az egyik ilyen egyszer feladat annak szmbavtele, hogy egy felhasznl vajon melycsoportoknak a tagja? Nem csak egyszeren a kzvetlen tagsg rdekel minket, hanem az ttteles is,azaz azok a csoportok is, amelyeknek azltal tagja a felhasznl, hogy ezeknek valamely tagcsoportjnaka tagja.

    Ahhoz, hogy az Active Directory-t PowerShell cmdletekkel elrjk, importlni kell azActiveDirectorymodult.Ehhez telepteni kell a Windows Server 2008 R2-es verzihoz adott Remote Administration Tools csomag

    AD DS eszkzei kztt tallhat Active Directory module for Windows PowerShell kpessget:

    Ha esetleg maga a tartomnyvezrlnk nem lenne Windows Server 2008 R2 verzij, akkor sincs gond, aManagement Gateway komponenst kell letlteni s telepteni. Ezutn a PowerShell ablakban importljukaz Active Directory modult:

    [1] PS C:\> Import-Module activedirectory

    Ezzel szmos j cmdlethez jutunk. De nzzk a megoldand feladatunkat, a csoporttagsg rekurzvfeldertsre a kvetkez fggvnyt lltottam ssze:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    29/36

    function get-ADMemberOfRecursive (

    $adobject,

    $eddig = (new-object Collections.ArrayList))

    {

    $ado = Get-ADObject $adobject -Properties memberof

    if($ado.memberof){$ado.memberof |

    foreach-object {$o = Get-ADObject $_

    if($eddig -notcontains $o.distinguishedname){

    [Void] $eddig.add(($o.distinguishedname))

    get-ADMemberOfRecursive $o $eddig

    $o

    }

    }

    }}

    A fggvny igazbl egy paramtert vradobjectnven, a msik csak a rekurzv meghvs miattiesetleges vgtelen ciklusok elkerlst szolglja. Hiszen lehet, hogy a felhasznl tagjaAcsoportnak, amitagja Bcsoportnak, de Bcsoport meg tagjaAcsoportnak. A csoporttagsg feldertse sorn teht szre

    kell tudni venni, hogy azAcsoportot mr feldertettk, gy azt mg egyszer nem kell vizsglni.

    A fggvny trzsben az AD objektumot jra lekrdezem aGet-ADObjectcmdlettel, hiszen lehet, hogy aparamterknt tadott objektum nem tartalmazza a csoporttagsg tulajdonsgot, ennek a kifejezsnek akimenete viszont igen. Ha ez az objektum tagja valamilyen csoportnak, akkor minden ilyen csoportra, ha

    mg nem vizsgltam, hozzadom aDistinguishadName tulajdonsgt az eddigi csoportok listjhoz smeghvom erre is a get-ADMemberOfGroupfggvnyt, de mr az eddigi vizsglt csoportok listjvalbvtve. Ezutn a vizsglt csoport objektumt kiadom a kimenetre. Nzzk ennek futst:

    [2] PS C:\> get-ADMemberOfRecursive (Get-ADUser vj)

    DistinguishedName Name ObjectClass ObjectGUID

    - - - -

    CN=temp,OU=Dem,... temp group 7cdd95c2-3ee1-4

    CN=n,OU=Dem,DC... n group ef75fe02-8168-4

    A VJ nev felhasznlm tagja aznnev csoportnak, ami pedig atempcsoportnak a tagja, az n

    csoportnak pedig tagja a temp. Ennek ellenre a fggvnyem nem futott vgtelen ciklusba, hanem ezt a ktcsoportot egyszer kiadta a kimenetre. A kvetkez futtatsban a tipikus csoporttagsg pldja lthat. Asoosbencefelhasznl tagja aUserGroupnak, ami viszont tagja a ResourceGroupnak:

  • 5/24/2018 A Windows PowerShell Rejtelmei

    30/36

    [3] PS C:\> get-ADMemberOfRecursive (Get-ADUser soosbence)

    DistinguishedName Name ObjectClass ObjectGUID

    - - - -

    CN=ResourceGroup... ResourceGroup group 3542d4c7-f045-4

    CN=UserGroup,OU=... UserGroup group 52fe0789-5c76-4

    Szervezeti diagram AD informcik alapjn

    A kvetkez,orgchart.ps1szkriptfjl egy kivlasztott felhasznlt amanagertulajdonsga, azaz az fnkt jelz AD informci alapjn behelyezi a szervezeti hierarchiba:

    param ($user)

    $user = Get-ADUser -Filter {samaccountname -eq $user} -Properties manager

    function get-topmanager ($u, $szint=0) {

    if($u.manager) {

    $fnk = Get-ADUser $u.manager -Properties manager

    if($u.distinguishedname -ne $fnk.distinguishedname){

    get-topmanager $fnk ($szint-1)}

    }

    $u | Add-Member -Member NoteProperty -Name szint -Val $szint -Pass

    -force

    }

    function get-beosztrecursive ($u, $sz = 0){

    Get-ADUser -Filter {manager -eq $u} -properties manager |

    ?{$_.distinguishedname -ne $u.distinguishedname} |

    %{if($_){

    $_ | Add-Member -Member NoteProperty -Name szint -Val $sz

    -Pass -for get-beosztrecursive $_ ($sz+1)}}

    }

    $tops = @(Get-TopManager $user)

    $offset = -$tops[0].szint

  • 5/24/2018 A Windows PowerShell Rejtelmei

    31/36

    $tops | %{$_.szint += $offset}

    $beosztottak = get-beosztrecursive $user ($offset+1)

    $tops, $beosztottak | %{$_} | ?{$_} | %{

    if($_.distinguishedname -eq $user.distinguishedname){$s = "*"}

    else{$s=" "} Write-Host ($s + ("|`t")*($_.szint) + "+ " + $_.name)

    }

    A szkriptben kt segdfggvnyt hasznlok: az egyik aget-topmanager, ami a paramtereknt megadottfelhasznlbl kiindulva vgigszalad a rangltrn, s megadja a feletteseket egszen addig, amg mrnincs tovbbi fnk, vagy esetleg valaki sajt maga fnke. Minden ilyen fnkhz egyszinttulajdonsgotis hozzrendelek, hogy tudjam, milyen mlysgben kell majd brzolni a felhasznlmat. A msiksegdfggvny rekurzvan kilistzza az adott felhasznl beosztottjait, azaz nem csak a kzvetleneket,hanem a beosztottak beosztottjait is, s gy tovbb. Hogy szp formzott lehessen az eredmny, ehhez ishozzveszem, hogy az adott beosztott hnyadik szint.

    Maga a szkript ezek utn nem bonyolult. Elsknt veszem a feletteseket a $tops vltozba. Az els elem,azaz a top manager szintjnek negltja adja meg, hogy mennyivel eltolva kell majd az egsz hierarchitmegjelentenem, s gyorsan el is tolom a szinteket, hogy a top manager szintje legyen a kiindul 0. Ezutnveszem rekurzvan a beosztottakat, a szint itt eggyel nagyobbrl indul, mint ahova a felettesek szintjeiveleljutottam. A vgn az sszes felettest s beosztottat kiratom, az ppen vizsglt felhasznlnl egy *karakterrel jelzem ezt, egybknt a szintnek megfelel darabszm fggleges vonal s tabultor karaktertratok ki, majd egy jelet, majd a felhasznl nevt. Nzzk a kimenetet a Nagy Fnk esetben:

    [4] PS C:\> C:\munka\orgchart.ps1 nf

    *+ Nagy Fnk

    | + Al1 Fnk

    | | + Kis1 Fnk

    | | + Kis2 Fnk

    | | | + Gl Andrs

    | | | + Budai Edina

    | | | + Dolk Fanni

    | + Al2 Fnk

    | + Al3 Fnk

    | | + Bornai Viktor

    | | + Balogh Mria

    | | + Budai Andrs

    Lthat, hogy a teljes hierarchia lthat. Nzzk csak azt az brt, amiben aKis2 Fnknevfelhasznlra vagyok kvncsi:

    [5] PS C:\> C:\munka\orgchart.ps1 kis2f

  • 5/24/2018 A Windows PowerShell Rejtelmei

    32/36

    + Nagy Fnk

    | + Al1 Fnk

    *| | + Kis2 Fnk

    | | | + Gl Andrs

    | | | + Budai Edina

    | | | + Dolk Fanni

    Lthat, hogy itt mr csak az al-ga ltszik teljesen kibontva, a fnkei irnyban csak egy t ltszik.

    Group Policy objektumok klnbsgeinek feldertse

    A rendszergazdk msik gyakori fejfjsa a Group Policy objektumok kezelse. Ha ksztnk kt GPO-t,akkor elg nehz az ezekben tallhat belltsokat egyms mellett ttekinteni. Mieltt az ezen a terletensegteni kpes PowerShell fggvnyt bemutatnm, nzzk elszr is, hogyan kezelhetjk PowerShellsegtsgvel a GPO-kat. Elsknt importlni kell a GroupPolicy modult:

    [6] PS C:\> Import-Module grouppolicy

    Ez a bvtmny tbbek kztt tartalmaz egy Get-GPOReportcmdletet, amellyel a GPO objektumoktartalmt tudjuk megnzni. Miutn n nem csak nzegetni, hanem feldolgozni akarom ezeket az adatokat,ezrt rdemes XML formtum kimenetet krni. Egykonkrt GPO beolvassa gy trtnhet:

    [7] PS C:\> $fgpo = [xml] (Get-GPOReport -Name FnkiGpek -ReportType XML)

    Ezzel az elll XML formtum kimenetet tnyleges XML adattpusknt tltm be a$fgpovltozba. Ezazrt j, mert ennek a vltoznak a tulajdonsgain keresztl frek hozz az adattartalomhoz:

    [8] PS C:\> $fgpo

    xml GPO

    - -

    version="1.0" encoding="utf-16" GPO

  • 5/24/2018 A Windows PowerShell Rejtelmei

    33/36

    Ez mg csak a "fejlc", de mehetnk mlyebbre a GPO tulajdonsgon keresztl:

    [9] PS C:\> $fgpo.gpo

    xsi : http://www.w3.org/2001/XMLSchema-instance

    xsd : http://www.w3.org/2001/XMLSchema

    xmlns : http://www.microsoft.com/GroupPolicy/Settings

    Identifier : Identifier

    Name : FnkiGpek

    IncludeComments : true

    CreatedTime : 2010-05-20T19:47:56

    ModifiedTime : 2010-05-20T19:56:59

    ReadTime : 2010-05-22T20:40:52.1631171Z

    SecurityDescriptor : SecurityDescriptor

    FilterDataAvailable : true

    Computer : Computer

    User : User

    Mehetnk tovbb aComputergban:

    [10] PS C:\> $fgpo.gpo.Computer

    VersionDirectory VersionSysvol Enabled ExtensionData

    - - - -

    14 14 true {Security, Publ

    s ennekExtesionDatagn tovbb:

    [11] PS C:\> $fgpo.gpo.Computer.ExtensionData

    Extension Name

    - -

    Extension Security

    Extension Public Key

    Extension Registry

  • 5/24/2018 A Windows PowerShell Rejtelmei

    34/36

    Lthat, hogy tbb elklnl rszben troldnak a GPO belltsai. A legtbb belltst ltalban aRegistrygban, azaz a grafikus felleten azAdministrative Templatesgban talljuk. Menjnk ebbe azirnyba tovbb s tovbb:

    [12] PS C:\> $fgpo.gpo.Computer.ExtensionData[2]

    Extension Name

    - -

    Extension Registry

    [13] PS C:\> $fgpo.gpo.Computer.ExtensionData[2].extension

    q3 type Policy RegistrySetting

    - - - -

    http://www.micro... q3:RegistrySettings {Restricts the U... {q3:RegistrySet

    [14] PS C:\> $fgpo.gpo.Computer.ExtensionData[2].extension.policy

    Name : Restricts the UI language Windows uses for all logged users

    State : Enabled

    Explain : This is a setting for computers with more than one UI

    language installed. If you enable this setting the UI

    language of Windows menus and dialogs language for systems

    with more than one language is restricted to the specific

    language. If the specified language is not installed on the

    target computer or the policy is disabled, the language

    selection defaults to the language selected by the local

    administrator.

    Supported : At least Windows Vista

    Category : Control Panel/Regional and Language Options

    DropDownList : DropDownList

  • 5/24/2018 A Windows PowerShell Rejtelmei

    35/36

    s itt jutottam el a tnyleges belltsokhoz, ahol is a rszletes lerstl kezdve minden hasznosinformcihoz hozzjuthatok. Ez olyan sok, hogy itt a cikkben jelentsen megvgtam. Ennek ismeretbennzzk, hogy hogyan lehet kt GPO objektumot sszehasonltani acompare-gpos.ps1szkriptemsegtsgvel:

    param ($gpo1, $gpo2, $hive = "User")

    function get-registrypolicy ($gpo, $h)

    {

    (([xml] (Get-GPOReport -name $gpo -ReportType XML -ErrorAction stop

    )).GPO.$h.ExtensionData | ?{$_.name -eq "Registry"}).exten

    sion.policy

    }

    $pol1 = get-registrypolicy $gpo1 $hive

    $pol2 = get-registrypolicy $gpo2 $hive

    if($pol1 -and $pol2) {

    Compare-Object $pol1 $pol2 -IncludeEqual -Property name, state

    }

    elseif($pol1){$pol1 |

    select-object name, state, @{n="SideIndicator";e={""}}}

    A szkript kt GPO nevet vr, illetve, hogy mely gakat hasonltsa ssze (User vagy Computer). Abelsejben definilok egy segdfggvnyt, amely a GPO azon rszeit szedi csak ki, amely a registry, azazAdministrative Templatesgon bell van. Ennek segtsgvel beolvasom mindkt GPO belltsait, majd akorbbi cikkekben mr ltottCompare-Objectcmdlettel sszehasonltom ezeket, de csak akkor, ha mindktGPO tartalmaz ezen az gon belltsokat. Ha nem, akkor n emullok hasonl kimenetet, mint amit aCompare-Objectadna, mert a "gyri" cmdlet res objektum sszehasonltst nem tudja megtenni. Hogymg ttekinthetbb legyen a kimenet, nzzk rgtn a grafikus rcsban aTitkrniGpeksa

    FnkiGpekGPO-k sszehasonltst:

    compare-gpos.ps1 TitkrniGpek FnkiGpek Computer | Out-GridView

  • 5/24/2018 A Windows PowerShell Rejtelmei

    36/36

    A fenti rcsban lthatjuk, hogy az els kt bellts mindkt GPO-ban megtallhat, mg a 3-4. csak aFnkiGpekben, s az 5-6. csak a TitkrniGpekben.

    Vgsz

    Termszetesen mindhrom kis pldm tovbbfejleszthet, a csoporttagsg rekurzv kifejtsre alapozottanknnyen fel lehet derteni, hogy vajon egy felhasznlnknak a fjlkiszolgln hol van rsi joga.Termszetesen nem csak a direkt jogmegadst keressk ilyenkor, hanem hogy valamely csoporttagsgaltal hol vannak jogai.A szervezeti diagram pldt abba az irnyba lehet tovbbfejleszteni, hogy ne csakmegjelentsben lehessen felhasznlni, hanem a kimenet maga felhasznli objektumok halmaza legyen.gy egyszeren meg lehetne oldani pldul azt, hogy lltsuk t minden olyan felhasznl csoporttagsgt,aki Kovcs Bla ltal felgyelt szervezeti egysgben dolgozik.

    A Group Policy pldt gy lehetne fokozni, hogy egyrszt ne csak a registry-alap belltsok kzttvizsgldjon, hanem ms rszekben is. Tovbb hasznos lenne az is, ha egy "etalon" GPO-hoz kpestvalamely GPO-ban azzal ellenttes belltsok vannak, akkor azokat igaztsa az etalonhoz. Szmtalanilyen pldt lehetne mg hozni. n prat sszegyjtttem ahttp://www.iqjb.hu/PSkonzultacio.phpoldalra,ha rdekli a tisztelt olvast ilyen jelleg problmk megoldsa PowerShell segtsgvel, keressenbizalommal!

    http://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.html

    http://www.hwsw.hu/hirek/44250/powershell-windows-shell-szkript.html

    http://www.hwsw.hu/hirek/44338/microsoft-windows-powershell-parancssor.html

    http://www.hwsw.hu/hirek/44492/microsoft-windows-powershell-parancssor.html

    http://www.hwsw.hu/hirek/44678/microsoft-windows-powershell-active-directory-group-policy-parancssor.html

    http://www.iqjb.hu/PSkonzultacio.phphttp://www.iqjb.hu/PSkonzultacio.phphttp://www.iqjb.hu/PSkonzultacio.phphttp://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.htmlhttp://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.htmlhttp://www.hwsw.hu/hirek/44250/powershell-windows-shell-szkript.htmlhttp://www.hwsw.hu/hirek/44250/powershell-windows-shell-szkript.htmlhttp://www.hwsw.hu/hirek/44338/microsoft-windows-powershell-parancssor.htmlhttp://www.hwsw.hu/hirek/44338/microsoft-windows-powershell-parancssor.htmlhttp://www.hwsw.hu/hirek/44492/microsoft-windows-powershell-parancssor.htmlhttp://www.hwsw.hu/hirek/44492/microsoft-windows-powershell-parancssor.htmlhttp://www.hwsw.hu/hirek/44678/microsoft-windows-powershell-active-directory-group-policy-parancssor.htmlhttp://www.hwsw.hu/hirek/44678/microsoft-windows-powershell-active-directory-group-policy-parancssor.htmlhttp://www.hwsw.hu/hirek/44678/microsoft-windows-powershell-active-directory-group-policy-parancssor.htmlhttp://www.hwsw.hu/hirek/44492/microsoft-windows-powershell-parancssor.htmlhttp://www.hwsw.hu/hirek/44338/microsoft-windows-powershell-parancssor.htmlhttp://www.hwsw.hu/hirek/44250/powershell-windows-shell-szkript.htmlhttp://www.hwsw.hu/hirek/44070/windows-powershell-script-parancssor.htmlhttp://www.iqjb.hu/PSkonzultacio.php