2012. március 23., péntek

PowerShell kezdőknek 1. rész

Sziasztok


Rájöttem, hogy bevezetőt írni borzalmasan nehéz!(Vagy háromszor írtam át, és még mindíg nem tetszik!)
Ezt a cikket először a kollégáimnak szántam,(nem is cikknek indult) hogy megmutassam, hogy milyen jó dolog a PowerShell-el foglalkozni. Gondoltam megosztom veletek. Nem kevés bátorítás kellett nekem.
Számtalanszor előfordult már, hogy kértek riportokat csoportokról, kinek/kiknek milyen hozzáférésük van, ki kinek a tagja, az Exchange beállításairól nem is beszélve. Emlékezzünk, arra, hogy anno megjelent a 2007-es verzió, és nagyon sok mindent csakis PowerShell-el lehetett megoldani.
(Az Exchange 2010-ben egy picit "konszolídálódott" a helyzet, és sok funkciókat visszaraktak GUI-ra.)
Viszont óhatatlanul belefut az ember olyan helyzetbe, amit nem lehet, csak PowerShell-el módosítani. A másik dolog, ami megfogott a "relatív használhatóság". Tipikus példa erre:
Tömeges átnevezést kellett eszközölni egy 600 useres vállalatnál az AD-ban adott objektumokban. Lehet egyenként GUI-n végig kattintgatni, de azt az ellenségemnek sem kívánom mégegyszer. Elég "favágó munka volt".
Erre (is) jó a PowerShell! Megkönnyíti a mindennapi dolgainkat.

Tudom, most sokan azt mondják, hogy sok minden megoldható pl. VB-scriptből, de én még nem láttam olyan VB script kódot, ami egyszerűbb lett volna, mint egy PS. (De az nem jelenti, hogy nem létezik!)

Ezért két tanács:
1. Próbáljunk meg nagyon  egyszerű lekérdezésekekel kezdeni. Ne akarjunk egyből az Exchange szerveren egy új címlistát létrehozni mondjuk három feltétellel, mert ha így kezdünk, akkor nagyon el fogunk vérezni.
Bár a Microsoft online helpje mostnában egyre jobb, és egy adott parancshoz még példák is vannak, sőt sikerült is még abszolút kezdő koromban egy viszonylag bonyolult beállítást megtenni, de később az alapok hiánya miatt megakadtam. Ezért:
2.Töltsük le, vagy vegyük meg Soós Tibor könyvét, és kezdjünk el gyakorolni, gyakorolni, gyakoroli. Másképp nem fog menni! Itt megtalálható online, és letölhető formátumban is.
Én személy szerint nagyon köszönöm a szerzőnek!

Jöjjön az egyik alap parancs, amit a mindennapi életben használunk:
Get-ADUser  Mint a neve is tükrözi, egy vagy több felhasználói információ(k) lekérdezésére szolgál.
Kezdjünk is neki:
Indítsuk el egy AD PowerShell-t és üssük be Get-ADUser majd enter.
Kapunk egy képernyőt, hogy ez így neki kevés, és adjuk meg neki valamilyen szűrőfeltételt.
(Legtöbbször a -Filter kapcsoló lesz majd használva.)


Na most, hogy ide mit/miket írhatunk be, az nagyon szépen le van írva a Microsoft honlapján, itt.
Van belőle bőven, de ne ijedjünk meg tőle!
A hétköznapokban úgyis csak 3-4 féle kapcsolót kell majd használni.
Jelen esetünkben is ha csillagot adunk be neki, akkor kilistázza az összes felhasználót az AD-ból.

Vigyázzunk azért a csillag karakterrel, mert egy ezer felhasználói környezetben tízezer sort kapunk! És az eltart egy darabig! Amúgy a  ctrl + C kombinációval meg lehet szakítani a lekérdezést.
Inkább nézzünk pár gyakorlatiasabb példát:
Írjuk be a következőt: Get-ADUser felhasználónév, majd nyomjunk egy entert, és a következő információt kapjuk :

Ezzel kapunk a felhasználóról 10 tulajdonságot.
Ha bővebb információra van szükségünk, akkor rakjuk hozzá a -Properties * kapcsolót is.
Próbáljuk ki tehát Get-ADUser felhasználónév -Properties *
Az eredményünk kimenete jóval több információ. Van még több is, de a mindennapi üzemeltetésben  több infó egyenlőre nem kell.
Nézzük meg a kimenetet: (Nem a teljes képet raktam ki. Részlet!)

Jó sok adatot kaptunk, pontosan mennyit, majd ha lesz kedvem összeszámolom.
Most nézzük meg, az említett a -Filter kapcsolót, mivel általában több felhasználót kell lekérdezni valamilyen szűrés alapján. Elsőnek keressük meg a "B" betűvel kezdődő felhasználókat: (Most csak egy feltétel esetén, majd a második fejezetben picit másképpen fog ez kinézni, de ne szaladjunk nagyon előre!)
A szintaktika Get-ADUser -Filter {name -like "b*"}
Egy kis magyarázat a Filter utáni részhez:
1. "Csőrös" zárójelbe tesszük a szűrőfeltételt.
2  -like kapcsoló értéket kér, amit " " közé tesszük. Itt megengedett a wildcard (*) karakter használata.
Kimenetként ezt kapjuk: (Megint csak részlet!)

Megkapjuk az összes "b" betűvel kezdődő felhasználó mind a 10 tulajdonságát.
Ez a kép egy picit zavaros, hát próbáljuk továbbszűrni, mert az olyan tulajdonság, mint a SID vagy a ObjectGuid csak igen ritkán van szükség.
Ezért a lekérdezésünket egy picit "tovább bonyolítjuk" mégpedig azzal, hogy nekünk elég a felhasználó neve, és a többi nem nem érdekel minket:
Get-ADUser -Filter {name -like "b*"} | select name
Nézzük meg az eredményt:


Ugye, sokkal átláthatóbb a formátum. Tehát a "bonyolított" lekérdezéssel egy egyszerűbb eredményt kaptunk.
Mit is tettünk?
A Filter után jön a szűrés, majd egy pipe "|" jel, ami azt jelenti, hogy az eddigi lekérdezésünkkel még szeretnénk valamit tenni. A fenti ábrán, csak a felhasználók neveit jelenítettem meg.

Finomítsuk tovább a lekérdezésünket, ha nem csak a nevére, hanem a  City-re is kíváncsiak vagyunk, akkor egyszerűen egy vesszőt kell tennünk a name után és beírni a city-t Tehát:
Get-ADUser -Filter {name -like "b*"} | select name, city
Kimenetként pedig a következőt kapjuk:


Valami nem stimmel a képen, Nem látom a City alatt a nevem mellett, hogy "Budapest".
Leellenőrizve a GUI-s felületen pedig ott van!


Hol van akkor gond?
Hát a lekérdezésben, mégpedig ott, hogy én csak az "alap" 10 tulajdonságok közül szerettem volna kilistázni a city-t, de az ott nem szerepel!. Ezért még egy picit bővítjük a lekérdezést, mégpedig oly módon, hogy azt mondom neki, hogy a -Filter szűrés az össze tulajdonság alapján hajtódjon végre, és azután menjen a select. Tehát itt is működik a -Properties * kapcsolóval a kibővített lekérdezés.
Mutatom a szintaktikát,
Get-ADUser -Filter {name -like "b*"} -Properties * | select name, city
No nézzük meg az eredményünket:


Látjuk, hogy a Ctiy mező is megjelenik.

Mielőtt továbblépnénk foglaljuk össze még egyszer az eddigi lekérdezést:
Get-ADUser -Filter {name -like "b*"} -Properties * | select name, city

1. Get-ADUser -Filter {name -like "b*"}  Kíváncsiak vagyunk a "b" betűvel kezdődő felhasználókra.
2.  -Properties * Bővített tulajdonságok is kellenek. Mert az "alap" lekérdezésben nem szerepet a "City".
3.  | select name, city Majd a lekérdezés eredményéből kilistázzuk amire szükségünk van.

Folytassuk azzal, hogy "emészthetőbb" formátumban szeretnénk tovább dolgozni, mert valami oka volt, hogy ezeket lekérdeztük.
Erre való az exportálás:
Több formátumba is megtehetjük.
A.,
Exportáljuk ki a lekérdezésünket CSV formátumba, hogy majd egy Excel-el tovább tudjunk dolgozni vele. Hogy is? Hát így:
Get-ADUser -Filter {name -like "b*"} -Properties * | select name, city | Export-Csv c:\busers.csv
Az eredményt pedig egy Excel megnyitásakor lehet látni:

Mi is történt?
Exportálás után, majd megjelenítettük a fájlt. Csak éppen az ékezetes karakterekkel nem boldogul. Szegény Péter kollégám P?ter lett ugye, ami nem igazán emészthető nekünk.
Erre is van "gyógyszer", de inkább válasszuk, azt a fajta lekérdezést, amit most fogok leírni, mert ez mindig működött. (nálam)
Vagyis így:
Get-ADUser -Filter {name -like "b*"} -Properties * | select name, city | ConvertTo-Csv | Out-File c:\busers.csv
És a következőt kaptuk:


Így csak szebb és olvashatóbb lett. :)

B.,
Ugyanez a lekérdezés, ha Html formátumot szeretnénk kimenetnek:
Get-ADUser -Filter {name -like "b*"} -Properties * | select name, city | ConvertTo-Html | Out-File c:\busers.html
Eredmény pedig:



Egy kis kiegészítő az újabb lila részhez:
A lekérdezés eredményét újabb pipe, ami ugyebár azt jelenti, hogy tovább szeretnénk dolgozni vele. Mi most átkonvertáltuk CSV formátumba, majd megint pipe, vagyis az eredménnyel tovább dolgozunk.
Mégpedig megmondjuk, hogy a kimeneti fájl hol legyen, és mi legyen a neve és a kiterjesztése.

A lekérdezést még tovább csinosíthatnánk, a táblázatot formázhatnánk, színezgethetnénk, de úgy gondolom, hogy ez kezdésnek elegendő.

Utószó:
A PowerShell-ben van egy nagyon jó help. Merjük használni.
A parancs szitaktikája:  Get-Help lekérdezés neve. Sok jó infót, és segítséget kapunk.
A mi példánkban: Get-Help Get-ADUser
Érdemes kipróbálni. A help végén általában le van írva, hogy miként lehet részletesebb helpet kérni az adott parancsról.
A következő részben ugyanez a parancs lesz, de több szűrőfeltételel spékelt lekérdezéseket fogok bemutatni.

Köszönöm
Imre

2012. március 22., csütörtök

Kimelegedtem

Sziasztok

Nem ma történt, amit leírok, de most teszem közzé.
Egy Hyper-V alatt futó virtuális gépen kikapcsoltam a snapshot-ot.
Na ezzel meg is zuhant. Nem tudtam online-ba hozni, arra panaszkodott, hogy az xml fájl sérült.
Az MS oldalán a következő van leírva(Lényeg):
Töröld le a gépet és az XML fájlt,majd hozz létre egy újat.
Na akkor elkezdtem rendesen kimelegedni, hiszen akkor tudomásom szerint a snapshot állapota elveszik.
Ezt pedig nagyon nem szerettem volna, mivel vagy 1 heti munkám volt benne, nem beszélve arról a tényről, hogy ez egy SCCM gép volt, ami ugyebár egy SQL szerverbe is dolgozik, tehát nem értem volna semmit az eredeti állapot visszaállításával, mert nagy eséllyel nem is indult volna el a program.
A megoldás nálam a következő volt:
Az xml fájlt egy notepad++ nevű segédprogrammal néztem meg, majd a szintaktikai hiba kijavítása után visszamásoltam az  eredeti helyére, és a virtuális gép elindult! Lehet(Sőt biztos!), hogy nagy szerencsém volt, de sikerült.
Két tanulság is van:
1. A snapshot bekapcsolása NEM mentésre való.
2. Ha a pillanatfelvételre nincs szükség, akkor állítsuk le a gépet, majd a snapshot kikapcs.
Ezek után türelmesen megvárjuk, míg az "összefésülés" megtörténik.

2012. március 5., hétfő

Exchange 2010 SP1 "Online defrag"

Sziasztok

A következőbe csak véletlenül futottam bele.
Létre kellett hoznom új adatbázis(okat).
Hogy ennek mi volt az oka, az most lényegtelen.
Átmozgattam az egyik adatbázisból a másikba a felhasználókat. Mivel 2010-es verzióról van szó, ezért nem volt gond online migrálásnak. Viszont észrevettem, hogy az adatbázis mérete kb. 30% kisebb lett!
Nem akartam hinni a szememnek, de a többi adatbázisnál is eljátszottam és 15-40 % közötti adatbázisméret csökkenés volt tapasztalható.
Tudom, hogy van egy online funkció, de (szerintem) közel sem olyan hatékony, mint ez a módszer.
Lehet, hogy nektek ez triviális, de szerintem ez egy járható út, hogy ne kelljen könyörögni a főnökségen karbantartási idő miatt.

Köszönöm
Imre