Administrace MS Exchange serveru 2010 - 28. část
Administrace Exchange serveru - 28. část
Praktické použití poweshellu    

Dnešní díl bude trochu jiný. Víceméně jsem během seriálu popisoval praktické věci, které si můžete zkoušet doma. Nebylo tam moc teorie, nějakého velkého vysvětlování, jak co a proč funguje. Spíš to byly takové návody, jak se dostat z bodu A do bodu B. Dnešek bude trochu o něčem jiném. Ukážu vám dvě verze jednoho scriptu, který jsem si napsal, protože jsem ho potřeboval v práci. Nejedná se o nic velkého. Ten script by určitě šel napsat efektivněji. Ale svoji funkci plní a umožní mi trošku ukázat, co se dá s powershellem dělat.

V rámci úkolů v práci se trochu víc specializuju na mobilní zařízení. Častým problémem u velkých zákazníků je, že každý chce mít extra moderní telefon, každý chce, aby se mu synchronizovala pošta, kalendář, kontakty. Ale málokdo se přijde zeptat Exchange administrátora, jaké zařízení si má koupit, aby mu do dobře fungovalo. Prostě si něco koupí a vy to vyřešte. Samozřejmě, že admin nemůže znát všechna zařízení a umět poradit u každého, jak co nastavit. Ale je dobré mít přehled, jaké zařízení se Vám připojují k Exchange serveru a i trochu přehled, v jakých počtech. Na domácím serveru je to samozřejmě jasné. Vím, jaký mobil používám já, jaký má manželka. Ale co ve firmě, kde je přes 8000 mailboxů? No a přesně pro takovou firmu jsem si napsal tyto dva scripty.

Script pro Exchange 2007

Script pro Exchange 2010

Jsou to texťáky. Stačí je uložit s příponou ps1. Scripty jsou komentované, ale i tak rozeberu, o co jsem se vlastně snažil. Cílem toho scriptu je vytvořit CSV soubor, který by šel naimportovat třeba do xls. Obsahem budou dva sloupce. V jednom bude zařízení a ve druhém bude počet těchto zařízení. Tím získáme představu, jaká zařizení jsou nejpopulárnější v dané firmě a můžeme se trochu připravit na to, jaké budeme asi dostávat nejčastější dotazy.

Na jaké problémy můžeme narazit? Jeden člověk mohl mít vícero zařízení. Pravděpodobně používá jen jedno, ale pokud to zařízení nebylo smazáno ze seznamu, tak se nám bude pořád objevovat v seznamu. To řeším tak, že beru pouze zařízení, která se v posledních 30 dnech pokusila připojit k mailboxu. Schválně neberu datum posledního úspěšného připojení, ale datum posledního pokusu o připojení. Zajímají mě i zařízení, které mají problémy.

Ale máme tu i druhou možnost. Jakmile se objeví nějaké nové zařízení, tak si ho chce spousta lidí vyzkoušet. Takže putuje od mailboxu k mailboxu a všem se objeví v připojených zařízeních. Tohle by šlo nějakým způsobem odfiltrovat. Třeba tak, že by se porovnávalo IMEI, jestli už bylo použito. Ale třeba některé Androidy po hard resetu změní IMEI, takže by se nám taky započítaly vícekrát. Rozhodl jsem se script nekomplikovat. Pokud nějaké zařízení kolovalo mezi uživateli, tak velkou část toho odfiltruje ta podmínka, že se musely pokusit připojit k mailboxu v posledních 30 dnech. Samozřejmě si můžeme script upravit tak, že zkrátíme interval třeba na 5 dnů.

Tak se jdeme podívat, co jsem to vlastně spáchal. V powershellu není potřeba dopředu deklarovat proměnné. Ale někdy je dobré si na začátku nějaké definovat. Pro nás je podstatná tato:

$Mailboxes = Get-CASMailbox -resultsize unlimited -filter {Activesyncenabled -eq $true}
$mobily = @{"Unknown" = 0}
"Zadna synchronizace:" > no_sync2007.txt
"Zadny deviceuseragent:" > no_agent2007.txt
$datum = ((get-date).AddDays(-30))

Do proměnné $Mailboxes ukládáme dotaz na CAS server, kdy chceme vybrat všechny mailboxy, u kterých je povolený ActiveSync. Smůla je, že je defaultně povolený všude. Vytváříme tzv. hash table, do které dáváme první prvek. Hash table je něco jako pole. U pole máme číselný index. Takže když máme například pole Studenti, tak první prvek pole je Student[0]. U hash table je indexem cokoliv, co tam dáme. V našem případě bude indexem typ mobilního telefonu. A hodnotou bude počet těchto telefonů. Na dalších dvou řádcích zakládáme textové soubory. Do prvního budeme zapisovat uživatele, kteří mají povolený ActiveSync, ale nikdy ho nepoužili. Do druhého budeme zapisovat jména uživatelů, kteří používají nějaké šílené zařízení, které nemá žádný DeviceUserAgent. Prostě se nijak nepředstaví. V tabulce se budou započítávat jako Unknown a mů se můžeme uživatelů zeptat, co to používají za zhovadilost. ;-) No a poslední proměná je datum. Všimněte si, že přidávám záporný počet dnů.

Jelikož jsem to dělal v notepadu a ne např. v powergui, které hlídá, co píšete, tak jsem si musel hlídat složené závorky. Proto jsou tam čísla a start a konec. Díky tomu poznáme, kde začíná cyklus a kde končí. A kde začíná a končí zpracování podmínky. Máme tu první cyklus:

Foreach ($Address in $Mailboxes)

A rovnou si přidáme řádek:

$mbx = get-activesyncdevicestatistics -mailbox $Address.Name

Jak jsme si řekli, tak v $Mailboxes máme uloženy všechny mailboxy, které mají povolený Active Sync. A ty mailboxy se nám budou jeden po druhém načítat do $Addresses. Takže máme jeden mailbox. Jméno toho mailboxu použijeme jako parametr -mailbox pro get-activesyncdevicestatistics. A výsledek se nám uloží do proměnné $mbx. A máme tu první podmínku.

If (!$mbx)

Je to vlastně negace. Ptáme se, jestli je $mbx prázdné. Pokud ano, tak uživatel Active Sync nepoužívá a my zapíšeme jméno do souboru. Mnohem zajímavější bude, když $mbx nebude prázdný. V tom případě následuje další cyklus. Proč? Protože jeden mailbox může být synchronizován až s deseti zařízeními. A my je musíme projít jedno po druhém a zpracovat. V mnoha případech cyklus proběhne jen jednou, protože tam bude pouze jedno zařízení. Ale to dopředu nevíme.

Foreach ($device in $mbx)

Takže informace o každém zařízení budeme postupně ukládat do proměnné $device. A hned si odfiltrujeme staré kousky.

If ((!$device.LastSyncAttemptTime) -OR ($device.LastSyncAttemptTime -lt $datum))

Takže se ptáme, jestli je pole posledního pokusu o synchronizaci prázdné nebo je datum posleního pokusu o synchronizaci starší než měsíc. Pokud ano, tak se neděje nic. A vezme se další zařízení ze seznamu. Ale pokud to podmínce nevyhoví, tak to zpracováváme dál.

If (!$device.DeviceUserAgent)

Má zařízení prázdný DeviceUserAgent? Pokud ano, tak si najdeme, jakou hodnotu má $mobily["Unknown"] a přičteme mu jedničku a uložíme. A do souboru zapíšeme jméno mailboxu, abychom věděli, koho se zeptat na zařízení. Pokud DeviceUserAgent není prázdný, tedy podmínka neplatí, tak se provede to co je ze else. Použijeme metodu split. On totiz DeviceUserAgent obsahuje části oddělené lomítky. Například: SonyEricssonW910i/R1EA, MSFT-PPC/5.2.5303, NokiaN97/3.00(73)MailforExchange. Nekdy se nám ty informace můžou hodit, ale nyní ne. Důvod, proč to dávám do pole je ten, že to nebude hlásit chyby v případě, že tam lomítko nebude. No další vysvětlení bude lepší na příkladu. Takže řekněme, že jsme dostali DeviceUserAgent např. NokiaN97/3.00(73)MailforExchange. Split z toho udělá NokiaN97. A do proměné $overit se načte hodnota $mobily[NokiaN97]. Následuje opět podmínka. Pokud to nenačetlo nic, tak to znamená, že NokiaN97 ještě v tabulce není. Takže je první a zapíše se tam s hodnotou 1. Pokud tam je, tak se načetla hodnota, ke které se přičte 1 a zase se uloží. A to je vlastně všechno. Takhle to bude běhat pro každý mailbox, dokud se nevyčerpají všechny zařízení, se kterými to synchronizovalo. A vezme se další mailbox, pro který zase proběhne vše dokola, dokud nedojdou mailboxy. V tu chvíli máme hash table s mobilními telefony a počty. Problém je, že se nedají zpracovat. K tomu je poslední řádek:

$mobily.GetEnumerator() | select key, Value | export-csv devices2007.csv -NoTypeInformation

Metoda GetEnumerator() udělá z naší Hash table objekt, na který budeme moct pustit select. Tím vybereme key, což byl prakticky index, tedy jméno telefonu. A potom taky Value, neboli hodnotu, což počet jednotlivých telefonů. A to pustím do export-csv a uložíme. Pokde jazykového nastavení to udělá hodnoty oddělené čárkou nebo středníkem. Rozumný admin má na serveru anglické prostředí, takže tam bude čárka. Pozor na to, až to budete chtít inportovat do Excelu na českých Windows 7, kde budete mít určitě nastavený oddělovač středník. Výsledek bude vypadat takto:

Seznamy zařízení (Ex2007).

O další dva soubory se s Vám podělit nemůžu, to už jsou interní firemní informace. Ale můžeme se podívat, co je jiného v druhém scriptu. Prakticky jen jedna podmínka.

If (!$device.DeviceFriendlyName)

V Exchange 2010 mimo jiné přibyla tato informace ve výpisu. Problémem je, že ji neposkytuje každé zařízení. Proto je script konstruován tak, že když tato informace chybí, tak proběhne stejně, jako u Exchange 2007. Tedy zjišťuje informaci z DeviceUserAgent. Pokud ovšem je, tak se použije k zpracování. Použití DeviceFriendlyName místo DeviceUserAgent má své plusy i mínusy. Například DeviceUserAgent MSFT-PPC/5.2.5303 může být mobil od jakéhokoliv výrobce, který má operační systém Windows mobile 6.5. Takže když použijete místo toho DeviceFriendlyName, tak zjistíte, že je to Sony Ericsson. Mezi námi děvčaty, v tomto případě to byla SE Xperia X2, což ale vím jen proto, že tato informace je z mého serveru a mého mailboxu, na kterém jsem tento mobil testoval. (Nebrat! Je pomalý a nic nevydrží.) Na druhou stanu vám mobilní telefony umožňují, abyste si je pojmenovali. Problém je, že to pojmenování se Vám zrovna zobrazí v DeviceFriendlyName. Pokud je ve firmě několik vtipálků, tak v seznamu najdete např. Můj hustej mobil, Karlův foun, Alčina nokyja a podobné chuťovky. Takže moje rada je použít v Exchange 2010 oba scripty a porovnat výsledky. Tady je ten druhý výstup. (Musel jsem ho malinko upravit, abych nesděloval nějaké tajné informace.)

Seznamy zařízení (Ex2010).

Třeba se vám to bude hodit.

Poslední aktualizace - Sobota, 16. Dubna 2011 20:58
 
 
 
Page 1 of 1
© TNX alias Jan Kovář. Původní design stránky byl určen pro CMS Joomla! a vytvořen společností Siteground web hosting