2012. április 18., szerda

Mentés-visszaállítás

Sziasztok

Végre sikerült a Microsoftnak egészen jó beépített mentő szoftvert készítenie.(WINDOWS 2008 R2)
Természetesen napi full mentés van minden szervernek beállítva. Az egyik virtuális gépünk, hogy miért az most lényegtelen, de teljesen megadta magát. Metésből 2 óra alatt sikerült visszaállítani, és mindenki boldog.
Ami meglepett, hogy nem volt egyáltalán bonyolult a visszaállítási procedúra, hanem szinte next-next-finis módszerrel el lehett intézni a dolgot. Végre az üzemeltetőkre is gondoltak, hogy ne kelljen mindenféle "agyműtétes, berhelős" megoldásokhoz nyúlni, ha gond van.

2012. április 17., kedd

PowerShell kezdőknek 2. rész

Sziasztok

Mint ígértem az előző írásomból most összetettebb lekérdezéseket fogok mutatni.
Maradjunk még egyenlőre a Get-ADUser parancsnál.

A példák kedvéért létrehoztam az AD-ban egy külön csoportot.
Majd hét felhasználót:
Világos János                                                                                                          
Vezér Gábor                                                                                                            
Szürke Lajos                                                                                                           
Sötét Kálmán                                                                                                           
Sárga Irén                                                                                                             
Sámán Ubul                                                                                                             
Kakukk Marci

A csoport neve kamilla lett.

A kollégám megkérdezte: Imre miért lett kamilla a csoport neve?
A válaszom:  Fogalmam sincs, de épp kamillateát szürcsöltem a megfázásomra......

Játszadozzunk velük:
1. Listázzuk ki Vezér Gábor beosztottjait:
Get-ADUser -Filter { manager -eq "vezer" } | select name
A kimenetként ezt kapjuk:

2.A lekérdezés az jó lett, de nem igazán szép. Szeretnénk ha a nevek ABC sorrendben jelenjenek meg, akkor:
Get-ADUser -Filter {manager -eq "vezer"} | select name | Sort-Object name
Azért így már csak szebb, mert a kimenetet nem írattam ki azonnal a képernyőre, hanem még továbbküldtem feldolgozásra, hogy 'name' mező szerint rendezze.

3. Listázzuk ki az "S" betűvel kezdődő felhasználókat, akiknek a Vezér Gábor a főnökük, és csak a nevükre vagyunk kíváncsiak. A többi információ most nem kell. Get-ADUser -Filter {( name -like "s*") -and (manager -eq "vezer")} | select name |  Sort-Object name.


Itt már csak kettő felhasználónk maradt, akik ezeket a feltételeket teljesítették.
Ez az első olyan lekérdezés, ami már összetettnek mondható, mert itt már két feltétel volt megadva.

4. Az elöző lekérdezésünk eredményét szeretnénk exportálni, természetesen azt is megtehetjük, akkor:
Get-ADUser -Filter {( name -like "s*") -and (manager -eq "vezer")} | select name |  Sort-Object name | ConvertTo-Csv | Out-File c:\temp\vezerg_beosztott.csv
Az eredmény most nem írodott ki a képernyőre, hanem megtalálható a Temp könyvtárunkban.

Mielőtt tovább mennék lekérdezést részletezném.
A., Get-ADUser -Filter  { ide írom be a szűrőfeltételt }
B., ( szűrőfeltétel 1 ) -és ( szűrőfeltétel 2 ) Látható, hogy ezeket sima zárójelekbe tettem.
C. Természetesen név szerint rendezve
DÉs a legvégén konvertáljuk, és elmentjük a megfelelő helyre.
Ha fordított ABC sorrendet szeretnénk listázni, akkor a Sort-Object name után a -Desc kapcsolóval lehet megtenni.

Ennél bonyolultabb lekérdezés ritkán kellenek a napi életben. Kifizetödőbb ha az ember szrikpt írásába fog. De azt később.

Pár példa, amit folyamatosan bővíteni fogok.:
Csoport tagokról infók:
Kérdezzük le a kamilla nevű csoport tagjait:
Get-ADGroupMember kamilla | select name | Sort-Object name 
Kérdezzük le a tagokat, de a manager neve is szerepeljen a képernyőn:
Get-ADGroupMember kamilla | Get-ADUser -Properties manager | select name, manager
Vagy másféleképpen:
Get-ADGroupMember kamilla | Get-ADUser -Properties * | Format-Table name, manager -AutoSize
Az eredményünk ugyanaz lett, de egy picit rendezettebb formában.
Listázzuk ki a kamilla csoport tagjait és milyen irodában (Office mező)vannak nyílvántartva az AD szerint:
Get-ADGroupMember kamilla | Get-ADUser  -Properties office  | select name, office

Most azt is megtehetnénk, hogy egyenként végigkattintgatunk, és leellenőrizzük, de egyszerű parancs beadásával sok időt takaríthatunk meg. Ha valaki véletlenül nem jó helyen van nyílvántartva azt nagyon egyszerűen meg is tudjuk változtatni. A következő rész erről (is)fog szólni.


Számítógépekről infók:

Keressünk számítógépeket, akik január 1. óta nem jeletkezett be:
Get-ADComputer -Filter {Lastlogondate -le "2012.01.01"} | select name
Szépen ki fogja listázni őket.

Annyit fűznék hozzá, hogy a szerverek az angol, de a területi beállítások az magyar, amin a lekérdezéseket tettem. Ezért a dátumformátum egyes gépeknél eltérő lehet!
Kellenének a gépek IP cimei tájékoztató jelleggel!:
Get-ADComputer -Filter * -Properties IPv4Address | select name,IPv4Address
Windows XP-s gépekről egy lista:
Get-ADComputer -Filter {OperatingSystem -eq "Windows XP Professional"} -Properties * | select name,OperatingSystem
Ugyaez, de SP infó is kellene: (Mennyire vagyunk elmaradva :) )
Get-ADComputer -Filter {OperatingSystem -eq "Windows XP Professional"} -Properties * | select name,OperatingSystem,OperatingSystemServicePackget

Felhasználókról infók:

Letíltott felhasználókról lista:
Get-ADUser -Filter {enabled -eq "False"} | select name
Akiknek soha nem jár le a jelszavuk:
Get-ADUser -Filter {PasswordNeverExpires -eq "True"} | select name
Lejárt jelszóval rendelkező fiók:
Get-ADUser -Filter {AccountExpirationDate -le "2012.04.20"} | select name
A dátumhoz természetesen az aktuális időpontot kell beírni!
Van olyan emberke, akinek nincs email-címe?:
Get-ADUser -Filter {EmailAddress -notlike "*"} | select name

Csoport infók:
Az összes csoport listája:
Get-ADGroup -filter * | select name
Az összes "B" betűvel kezdödő csoport listája:
Get-ADGroup -Filter { name -like "b*"} | select name


Nagyon sok lekérdezést másképpen is le lehetett volna kérdezni, ez már csak szokás kérdése, hogy melyiket használjuk. A következő részben mutatok is rá példát.

Források tudjátok amiből tanulgato:
- Elsők között megemlítem Soós Tibor könyvét! Köszönet neki!
Egyszerűen baromi jó, érthető  könyv, és egy kezdő emberke számára, aki most ízlelgeti a PowerShell-t, annak kiváló indulási alap.
- Powershell saját help-je.
- Microsoft technet.
- És természetesen az internet.
A következő részben  a keresés lesz az egyik téma, és már állítgatni fogjuk a felhasználókat, de most "tömegesen", mert ugyebár egyenkénti kattintgatásra ott a GUI.

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