-
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