Od verze Exchange 2007 SP1 obsahuje poštovní server Exchange Web Services (EWS), tedy rozhraní pro přístup k položkám v Exchange data store. Pro programování nebo skriptování je k dispozici Exchange Web Services Managed API, což je knihovna, která dovolí využít EWS a to i třeba z PowerShellu. Můžete to být zajímavý nástroj, pouze se mi zdá podivný způsob, jak je umožněno přistupovat ke schránkám uživatelů. I když jste Exchange Admin, tak nemáte oprávnění pomocí EWS získat nějaké informace, ale musí se použít Impersonation (popis pro Exchange 2007), což je zjednodušeně řečeno nastavení speciálního oprávnění na účty uživatelů.
Tento článek je pouze malým navedením, jak EWS v PowerShellu použít.
Nejprve musíme načíst knihovnu EWS.
Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services\1.1\Microsoft.Exchange.WebServices.dll"
Vytvoříme objekt služby Exchange, důležité je specifikovat verzi Exchange (jinak dostaneme chybu při bind, zadání s SP2 mi nefungovalo).
$exchService = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)
Musíme zadat adresu CAS serveru, buď ručně nebo se určí automaticky pomocí Autodiscover (pro určitého uživatele).
$exchService.Url = "https://mail.firma.local/EWS/Exchange.asmx" $exchService.AutodiscoverUrl("bouska@firma.cz")
Další důležitý krok je, k jaké schránce a pod jakými právy budeme přistupovat, máme tři možnosti. U prvních dvou zadáváme uživatele, pod kterým budeme přistupovat, a defaultně se přistupuje k jeho schránce. První možnost, využijí se credentials aktuálního uživatele.
$exchService.UseDefaultCredentials = $true
Nebo zadáme credentials nějakého určitého uživatele, musí se zadat i jeho heslo.
$exchService.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($user, "heslo", "domain")
Poslední možnost je využít impersonalizace, tehdy přistupujeme k účtu zadanému v této funkci. Standardně pod uživatelem, který spustil skript, a ten musí mít práva pro Impersonation.
$exchService.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, "nekdo@firma.cz")
Nyní se již můžeme připojit k nějaké složce (folder) uživatele. V příkladu se připojíme ke kalendáři.
$calendar = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($exchService, [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar)
Zde můžeme například zobrazit práva na kalendáři. Druhý řádek zobrazí informace o uživateli, který je přiřazen první položce.
$calendar.Permissions $calendar.Permissions[0].UserId
Práva můžeme i nastavit (pokud pro daného uživatele již práva nastavena jsou, dostaneme chybu). Na konci je třeba provést aktualizaci, aby se změna provedla.
$FolderPermission = New-Object Microsoft.Exchange.WebServices.Data.FolderPermission("nekdo-jiny@firma.cz", [Microsoft.Exchange.WebServices.Data.FolderPermissionLevel]::Reviewer) $calendar.Permissions.Add($FolderPermission) $calendar.Update()
Zatím zde nejsou žádné komentáře.