20
PowerShell és Exchange 2007 rendszerfelügyelet Fóti Marcell NetAcademia Oktatóközpont MCT, MCSE, MVP, MZ/X [email protected]

PowerShell és Exchange 2007 rendszerfelügyelet

Embed Size (px)

DESCRIPTION

PowerShell és Exchange 2007 rendszerfelügyelet. Fóti Marcell NetAcademia Oktatóközpont MCT, MCSE, MVP, MZ/X [email protected]. 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 - PowerPoint PPT Presentation

Citation preview

Page 1: PowerShell és Exchange 2007 rendszerfelügyelet

PowerShell és Exchange 2007 rendszerfelügyeletFóti MarcellNetAcademia OktatóközpontMCT, MCSE, MVP, MZ/[email protected]

Page 2: PowerShell és Exchange 2007 rendszerfelügyelet

A rendszer felépítésének áttekintése

Objektumorientált, .net-alapú shell, deKis-nagybetű érzéketlenVariant változókTípushű objektumok, adatok

Command és Expression módMinden adat – collectionTávoli futtatás egyelőre nincsParancssor és PS-Analyzer.PS1 fájlok

Page 3: PowerShell és Exchange 2007 rendszerfelügyelet

A parancsok szintaxisaIge-főnév

Get-Process, Get-Childitem, Get-HelpStop-Service, Set-Location

A paramétereket mindig a shell dolgozza felEgységes formátumHa 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: |

Page 4: PowerShell és Exchange 2007 rendszerfelügyelet

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-PSDriveAz ö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)

Page 5: PowerShell és Exchange 2007 rendszerfelügyelet

Navigáció

Set-Location (CD)Set-Location C:CD HKLM:SL Cert:CHDIR Env:

Get-Childitem (DIR)LS, DIR, GCI

Page 6: PowerShell és Exchange 2007 rendszerfelügyelet

Munka objektumcsoportokkal (collection)

Minden parancs objektumhalmazokkal dolgozik1, 2, 3, 4

A halmazok tetszőleges és vegyes típusú elemeket tartalmaznak

Get-Childitemnél fájlok+könyvtárak vegyesenDir ; 1, 2, 3, 4

A halmaz egyes elemeit Foreach-Object-tel lehet egyesével kezelniforeach {$_}

$_ a halmaz aktuális eleme (1..5 | foreach {“blabla$_"})dir | foreach {$_.LastAccessTime - $_.LastWriteTime}

Page 7: PowerShell és Exchange 2007 rendszerfelügyelet

Munka objektumkupacokkalSelect-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ítottakGroup-Object

Tetszőleges property alapjánMeasure-Object

Statisztika

Page 8: PowerShell és Exchange 2007 rendszerfelügyelet

Nyalánkságok

FájlkezelésGet-content, set-content

.net objektumok statikus metódusainak meghívása

[névtér]::Metódus()

WMI-objektumok megszólításaGet-wmiobject

PowerGadgets

Page 9: PowerShell és Exchange 2007 rendszerfelügyelet

Exchange 2007 scriptelése

Page 10: PowerShell és Exchange 2007 rendszerfelügyelet

E2007 -eq “Pofonegyszerű”

Exchange 2003 (VBScript) E12 (PowerShell one-liner)Mailbox Statistics

Set listExchange_Mailboxs = GetObject("winmgmts:{impersonationLevel=impersonate}!\\COMPUTERNAME\ROOT\MicrosoftExchangeV2").InstancesOf("Exchange_Mailbox")

For Each objExchange_Mailbox in listExchange_MailboxsWScript.echo "AssocContentCount =” + objExchange_Mailbox.AssocContentCountWScript.echo " DateDiscoveredAbsentInDS =” + objExchange_Mailbox.DateDiscoveredAbsentInDSWScript.echo " DeletedMessageSizeExtended =” + objExchange_Mailbox. DeletedMessageSizeExtendedWScript.echo " LastLoggedOnUserAccount =” + objExchange_Mailbox. LastLoggedOnUserAccountWScript.echo " LastLogoffTime =” + objExchange_Mailbox. LastLogoffTimeWScript.echo " LastLogonTime =” + objExchange_Mailbox. LastLogonTime WScript.echo " LegacyDN =” + objExchange_Mailbox. LegacyDNWScript.echo " MailboxDisplayName =” + objExchange_Mailbox. MailboxDisplayNameWScript.echo " MailboxGUID =” + objExchange_Mailbox. MailboxGUID WScript.echo " ServerName =” + objExchange_Mailbox. ServerName WScript.echo " Size =” + objExchange_Mailbox. SizeWScript.echo " StorageGroupName =” + objExchange_Mailbox. StorageGroupName WScript.echo " StorageLimitInfo =” + objExchange_Mailbox. StorageLimitInfo WScript.echo " StoreName =” + objExchange_Mailbox. StoreName WScript.echo " TotalItems =” + objExchange_Mailbox. TotalItems Next

get-mailboxstatistics –server $servername

Database Mgmt

Dim StorGroup as New CDOEXM.StorageGroup

StorGroup.DataSource.Open "LDAP://" + DCServer + "/ CN=First Storage Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services, CN=Configuration," + DomainName

StorGroup.MoveLogFiles("C:\newlogPath", 0)

move-storagegrouppath -identity “First Storage Group“ –log "C:\newlogPath”

Recipient Mgmt

Dim objMailbox As CDOEXM.IMailboxStore

Set objMailbox = GetObject("LDAP://" + DCServer + "CN=FOO,CN=users," + DomainName)

objMailbox.CreateMailbox "LDAP://" + DCServer + "/CN=Private MDB,CN=First Storage Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group, CN=Administrative Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services, CN=Configuration," + DomainName

enable-mailbox -identity domain\FOO –database “First Storage Group\Private MDB”

Page 11: PowerShell és Exchange 2007 rendszerfelügyelet

Exchange “Task Model”

A cél a rendszergazdai feladatok egyszerűsítéseA „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 tasksOrganization management tasks Server management tasks Diagnostic Tasks

A feladatok tovább vannak bontva szerverszerepek és funkciók szerint

Roles: Edge/Hub Transport, CAS, Mailbox, UMFeatures: AntiSpam, Managed Email, Transport, Rules etc.

Page 12: PowerShell és Exchange 2007 rendszerfelügyelet

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 managementDistribution 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 settingsStorage group, mailbox and public folder databases, LCR / HA, Virtual directories, SMTP connectors, POP, IMAP

Diagnostics Queue management, test server health, connectivity, BPA

Page 13: PowerShell és Exchange 2007 rendszerfelügyelet

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-storagegroup TestSG | get-member

Súgórendszer

Page 14: PowerShell és Exchange 2007 rendszerfelügyelet

„Tárgyak” azonosításaAz ö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éketnew-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 Identityt megadhatja GUID vagy DN formátumban is

Page 15: PowerShell és Exchange 2007 rendszerfelügyelet

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 rulezGet-Mailbox *joe*Get-ExchangeServer *North* Get-SendConnector *.hp.com

Egyes parancsok szerveroldali szűréssel is rendelkeznekGet-Mailbox -filter { DisplayName -like ‘*Test*’ }

Page 16: PowerShell és Exchange 2007 rendszerfelügyelet

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 }

Page 17: PowerShell és Exchange 2007 rendszerfelügyelet

Balesetmegelőzés1. Viselj világítós mellényt!2. Használd a whatif, confirm, verbose kapcsolókat!

Az összes cmdlets (a get-* kivételével) tudja a –whatif-etA „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 ELCp1if ( $object.IsValid –eq $false ) {

$whatsWrong = $object.Validate() $whatsWrong | select-object InvalidData,Description,PropertyDefinition

}

A set-* cmdletekkel gyógyítunk $fixedObject | Set-ManagedFolder

Page 18: PowerShell és Exchange 2007 rendszerfelügyelet

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-DistributionGroup newEmployees | get- DistributionGroupMember | enable-mailbox -database newDb1

Get-MessageTrackingLog -MessageSubject "SomeTextFromTheSubject" | Group ClientIP | Select Name | nslookup $_

Page 19: PowerShell és Exchange 2007 rendszerfelügyelet

param( [string]$server = $(read-host "Target server"))

new-storagegroup Congress -server $server | out-nullnew-mailboxdatabase Senate -storagegroup exadmin-mbx-02\Congress |

mount-databasenew-mailboxdatabase House -storagegroup exadmin-mbx-02\Congress |

mount-databasewrite-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"

Exchange 2007 időgépÉs akkor elkezdett meredeken zuhanni a TCO...

Page 20: PowerShell és Exchange 2007 rendszerfelügyelet

ResourcesExchange 2007 + PowerShellWeblapok, Wiki-k, és Blogok

http://exchangeninjas.comhttp://www.viveksharma.com/techlog/http://www.msexchangeteam.comhttp://blogs.technet.com/evand/

PowerShell Team Bloghttp://blogs.technet.com/powershell/