zoukankan      html  css  js  c++  java
  • [Outlook] 用powershell做outlook中的delegate.

    This arctical will be published in English also - http://www.cnblogs.com/LarryAtCNBlog/p/4062593.html

    环境Exchange 2010 SP2 + Outlook 2010

    加delegate其实并不是一条命令的事,因为在server上用命令行操作和outlook本地操作完全不一样,outlook会自动做其它很多事情,如下图是outlook中默认会勾上的几个功能。

    1. Calendar的editor权限

    2. Tasks的editor权限

    3. Delegate receives copies of meeting-related messages sent to me 会打上勾

    这其实在outlook2003中就是如此,但这导致了一个问题,在exchange 2010中,虽然提供了一个Set-Mailbox -GrantSendOnBehalfTo来加delegate,但这仅仅是加一个delegate,完全没有默认设置上图中的各种选项,因此就要通过其它一些命令来做。

    1. Calendar和Tasks都可以用Add-MailboxFolderPermission来添加权限。

    2. 问题在于"Delegate receives copies of meeting-related messages sent to me",这个功能是很多Assistant都要的,但是唯独它没有一个cmdlet能直接做到修改。

    于是,下面就是怎么利用EWS(Exchange web service)来做一个完整的delegate,其实outlook也是通过它做的。

    第一步,下载EWS API - http://www.microsoft.com/en-us/download/details.aspx?id=35371

    安不安装都无所谓,我们只需要用到里面的Microsoft.Exchange.WebServices.dll,用7z其实可以解压出来跳过安装。

    然后打开powershell,由于用的是Webservice,这个powershell在哪运行就无所谓了。

    用import-module引导该dll,它的类才可以被我们使用,当然如果喜欢高大上的代码,也可以用[Reflection.Assembly]::LoadFile()方法。

    Import-Module .Microsoft.Exchange.WebServices.dll

    运行下面的代码建立一个ExchangeService的instance,如果没有后面的Exchange2010_SP2,该instance会默认以API里最新的建立。

    $Service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService('Exchange2010_SP2')

    再输入$Service可以看到一些属性,或者用get-member也可以得到方法,这里我就不贴出来了。

    这时候需要指定EWS的url,有两种办法,一种是直接指定EWS的URL,或者用$Service里带的一个method叫AutodiscoverUrl自动发现一下,个人是推荐AutodiscoverUrl的,因为这是直接从AD里读取Autodiscover的配置,只要outlook能正常discover,那这个功能肯定也没问题。

    $Service.AutodiscoverUrl('xxxxx@yyy.com')

    或者像下面直接指定CAS服务器上的ews

    $Service.Url = 'https://CASServer/ews/exchange.asmx'

     从$Service的方法中,可以看到和delegate相关的方法($Service | get-member)

    AddDelegates
    GetDelegates
    RemoveDelegates
    UpdateDelegates

    还是很明显的,用AddDelegates就可以添加delegate了,使用$Service.AddDelegates可以直接输出它接收的几个参数,输出结果可能有些乱,清理如下,

    参数1是一个mailbox,也就是我们的目标mailbox
    Microsoft.Exchange.WebServices.Data.Mailbox mailbox
    
    参数2是一个meetingRequestsDeliveryScope
    Microsoft.Exchange.WebServices.Data.MeetingRequestsDeliveryScope meetingRequestsDeliveryScope
    
    参数3是一个delegateUsers的集合
    Microsoft.Exchange.WebServices.Data.DelegateUser

    其中参数2就是下图outlook中的设置,

    现在方法有了,参数也知道了,参数类型也有了,那就一个个把它们生成出来就好了。

    生成参数1,

    $Mailbox = New-Object Microsoft.Exchange.WebServices.Data.Mailbox('xxxxx@yyy.com')

    生成参数2,

    $Scope = [Microsoft.Exchange.WebServices.Data.MeetingRequestsDeliveryScope]::DelegatesOnly

    生成参数3,

    $dgUser = New-Object Microsoft.Exchange.WebServices.Data.DelegateUser('zzz@yyy.com')
    $dgUser.Permissions.CalendarFolderPermissionLevel = 'editor'
    $dgUser.Permissions.TasksFolderPermissionLevel = 'editor'
    $dgUser.ReceiveCopiesOfMeetingMessages = $true

    好了,3个参数完成,下面是调用AddDelegates把delegates加上去。

    $Service.AddDelegates($Mailbox, $Scope, $dgUser)

    运行正确是不会报错的,但是可能会失败,这个方法的返回是执行结果,如果错误的话也会包括具体的错误信息非常好排错。

    最后,也是很多文章都没有提及的,就是必须有至少是impersonation的role权限,

    http://msdn.microsoft.com/en-us/library/office/bb204095(v=exchg.140).aspx

  • 相关阅读:
    使用 asp.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/LarryAtCNBlog/p/4061861.html
Copyright © 2011-2022 走看看