200 likes | 284 Views
PowerShell és Exchange 2007 rendszerfelügyelet. Fóti Marcell NetAcademia Oktatóközpont MCT, MCSE, MVP, MZ/X marcellf@netacademia.net. A rendszer felépítésének áttekintése. Objektumorientált, .net-alapú shell, de Kis-nagybetű érzéketlen Variant változók Típushű objektumok, adatok
E N D
PowerShell és Exchange 2007 rendszerfelügyelet Fóti Marcell NetAcademia Oktatóközpont MCT, MCSE, MVP, MZ/X marcellf@netacademia.net
A rendszer felépítésének áttekintése • Objektumorientált, .net-alapú shell, de • Kis-nagybetű érzéketlen • Variant változók • Típushű objektumok, adatok • Command és Expression mód • Minden adat – collection • Távoli futtatás egyelőre nincs • Parancssor és PS-Analyzer • .PS1 fájlok
A parancsok szintaxisa • Ige-főnév • Get-Process, Get-Childitem, Get-Help • Stop-Service, Set-Location • A paramétereket mindig a shell dolgozza fel • Egységes formátum • Ha saját parancsot írunk, nem kell paraméterfeldolgozással bíbelődni • Wildcard-ready: *, ?, [] • Utasítás-zárójel: {} • Expression Mode: () • Változók: $alma, $_ • Egy sorban több parancs: ; • Konstansok (1kb, 2mb, 3gb) • Pipe: |
A help használata, aliasok, PSDrive-ok • Get-Help (-e) • Parancsok, Aliasok, Helpek, Providerek • Get-Command (get-command | group noun) • Parancsok, Aliasok, függvények, alkalmazások • Get-Member (get-date | get-member) („asda”.Substring()) • A lekérdezett objektumok összes metódusa és tulajdonsága • Get-PSDrive • Az összes provider, amit be lehet járni DIR-DURR • DIR Alias: • Kétbetűs aliasok (Set-Location, SL; Stop Process, SP) • SQL-jellegű aliasok (SELECT, WHERE) • Kompatibilitási aliasok (DIR, LS, CD)
Navigáció • Set-Location (CD) • Set-Location C: • CD HKLM: • SL Cert: • CHDIR Env: • Get-Childitem (DIR) • LS, DIR, GCI
Munka objektumcsoportokkal (collection) • Minden parancs objektumhalmazokkal dolgozik • 1, 2, 3, 4 • A halmazok tetszőleges és vegyes típusú elemeket tartalmaznak • Get-Childitemnél fájlok+könyvtárak vegyesen • Dir ; 1, 2, 3, 4 • A halmaz egyes elemeit Foreach-Object-tel lehet egyesével kezelni • foreach {$_} • $_ a halmaz aktuális eleme (1..5 | foreach {“blabla$_"}) • dir | foreach {$_.LastAccessTime - $_.LastWriteTime}
Munka objektumkupacokkal • Select-Object • Oszlopok kiválogatása (kivéve –first, -last) • Where-Object • Sorok kiválogatása {$_} • Sort-Object • Sorbarendezés • Összetett műveletek • Az öt legnagyobb olyan fájl, amit 2007-ben módosítottak • Group-Object • Tetszőleges property alapján • Measure-Object • Statisztika
Nyalánkságok • Fájlkezelés • Get-content, set-content • .net objektumok statikus metódusainak meghívása • [névtér]::Metódus() • WMI-objektumok megszólítása • Get-wmiobject • PowerGadgets
Exchange “Task Model” • A cél a rendszergazdai feladatok egyszerűsítése • A „Task Model” a felügyeleti funkciók logikus csoportosítása • A „task” vagy feladat egy elemi műveletet jelent (pl. move a mailbox) • A feladatokat négy csoportba soroljuk: • Recipient management tasks • Organization management tasks • Server management tasks • Diagnostic Tasks • A feladatok tovább vannak bontva szerverszerepek és funkciók szerint • Roles: Edge/Hub Transport, CAS, Mailbox, UM • Features: AntiSpam, Managed Email, Transport, Rules etc.
Mihez van Cmdlet? • Az összesen 375 cmdlet teljesen lefeldi az Exchange 2007 rendszerfelügyeletét • Kivételek: külső termékek által nyújtott szolgáltatások (IIS, ADUC) és néhány őskövület. • Recipient management • Distribution group, DDG, Mailboxes, mail-enabled contacts, users, Mailbox Policies, Email Address Policies • Organization settings • Transport Rules, Journaling, Routing, Filtering, Managed Folders, Address Lists, OAB, Anti-Spam, ActiveSync, UM • Server settings • Storage group, mailbox and public folder databases, LCR / HA, Virtual directories, SMTP connectors, POP, IMAP • Diagnostics • Queue management, test server health, connectivity, BPA
Súgórendszer • A help parancs segít a cmdletek és kategóriák felderítésében Get-help *User* Get-help -role *UM*Get-help –component *recipient* • További részletek... Get-mailbox -? | more Help remove-storagegroup • Lássuk, mit is adnak vissza az egyes parancsok? Get-Mailbox TestUser | format-list Get-Mailbox TestUser | fl *quota* • A get-member a rendszergazda második (vagy a harmadik?) legjobb barátja Get-storagegroupTestSG | get-member
„Tárgyak” azonosítása • Az összes objektum egyedi azonosítóval (Identity) rendelkezik (név, GUID vagy DN) • Két objektumcsoport van: • Singleton: egypéldányos jószágok • Multiple instance: jószág-csokrok, ahol az azonosító tesz különbséget • Az “Identity” az objektum létrehozásakor kap értéket new-StorageGroup -name SG1 -server SERVER1 • Innentől az Identityjével „találjuk fejbe” set-StorageGroup SG1 -param1 arg1 • Az Identityk láncából „útvonal” képezhető • URL: “ftp://server/container/resource.exe” • Identity: “container\resource1\resource2…” get-MailboxDatabase “Mailbox Store”get-Mailbox redmond\evandremove-AddressList AddressList1\AddressList2 • Így aztán nem kell állandóan a tartománynévre és egyéb irreleváns adatokra hivatkozni! • Ha valakinek az „kényelmes”, az Identitytmegadhatja GUID vagy DN formátumban is
Keresés • Egy parancs általában visszaadja az összes objektumot, ezt a listát szűrhetjük (kliens): Get-TransportServer | where { $_.MessageTrackingEnabled –eq $false } • Dzsóker rulez Get-Mailbox *joe*Get-ExchangeServer *North* Get-SendConnector *.hp.com • Egyes parancsok szerveroldali szűréssel is rendelkeznek Get-Mailbox -filter { DisplayName -like ‘*Test*’ }
Pipelining (csövezés) • Egyszerre egy sereg objektum feldolgozása get-StorageGroup | set-StorageGroup -param1 arg1 -param2 arg2 • Ugyanazon főnéven belül a csövezés mindig működik (cmd1 | cmd2) Get-Mailbox redmond\evand | remove-mailbox • ... és néha a szavakon túl is... Get-Mailbox redmond\evand | Test-MapiConnectivity • Ha nem megy a csövezés, használj “ForEach” parancsot! Get-ExchangeServer | foreach { get-Storagegroup –server $_.Name }
Balesetmegelőzés • Viselj világítós mellényt! • Használd a whatif, confirm, verbose kapcsolókat! • Az összes cmdlets (a get-* kivételével)tudja a –whatif-et • A „gyilkos” parancsok mindig kérdeznek! • Hibás/félresikerült objektumok kezelése: • Ha „hibás”, üzenetet kapunk • …ezt akár kódból mi magunk is ellenőrizhetjük $object = Get-ELCMailboxPolicy ELCp1 if ( $object.IsValid –eq $false ) { $whatsWrong = $object.Validate() $whatsWrong | select-object InvalidData,Description,PropertyDefinition } • A set-* cmdletekkel gyógyítunk $fixedObject | Set-ManagedFolder
Néhány „egyszerű” példa • Hát lássuk, értelmezzük! • Get-Mailbox -server E12admin | foreach { get-MailboxDatabase $_.Database } | group Name • 1..5 | foreach { new-storagegroup -name (“SG $_”) -server E12admin | new-mailboxdatabase “MB” } • Get-DistributionGroupnewEmployees | get-DistributionGroupMember | enable-mailbox -database newDb1 • Get-MessageTrackingLog -MessageSubject "SomeTextFromTheSubject" | Group ClientIP | Select Name | nslookup $_
Exchange 2007 időgépÉs akkor elkezdett meredeken zuhanni a TCO... param( [string]$server = $(read-host "Target server")) new-storagegroup Congress -server $server | out-null new-mailboxdatabase Senate -storagegroup exadmin-mbx-02\Congress | mount-database new-mailboxdatabase House -storagegroup exadmin-mbx-02\Congress | mount-database write-host "Databases created" # get top user $mbxset = (get-mailboxstatistics -server exadmin-mbx-01| sort TotalItemCount -desc)[0..49] $mbxset | foreach{ get-mailbox $_.LegacyDN } | where {$_.Database -like "House*"} | move-mailbox -targetdatabase $server\house | out-null write-host "Representatives moved" $mbxset | foreach{ get-mailbox $_.LegacyDN } | where {$_.Database -like "Senate*"} | move-mailbox -targetdatabase $server\Senate | out-null write-host "Senators moved"
Resources • Exchange 2007 + PowerShellWeblapok, Wiki-k, és Blogok • http://exchangeninjas.com • http://www.viveksharma.com/techlog/ • http://www.msexchangeteam.com • http://blogs.technet.com/evand/ • PowerShell Team Blog • http://blogs.technet.com/powershell/