【问题标题】:Where is Microsoft.Exchange.RecipientTasks locatedMicrosoft.Exchange.RecipientTasks 位于何处
【发布时间】:2016-09-30 14:01:02
【问题描述】:

我正在尝试通过自动交换管道使用远程 powershell 来自动化获取和设置邮箱权限的过程。 Get-MailboxPermission 命令输出的 AccessRights 属性的类型为 Microsoft.Exchange.RecipientTasks.MailboxRights []。据我所知,我在 nuget 上的任何地方都找不到这个命名空间,而且它似乎不是 EWS api 的一部分。有谁知道在哪里可以找到这个命名空间,以便我可以在我的项目中引用它,或者是否有办法将输出转换为标准对象类型?

谢谢

【问题讨论】:

    标签: c# powershell automation exchange-server


    【解决方案1】:

    在 Remote Powershell 中,您已反序列化类型 https://blogs.msdn.microsoft.com/powershell/2010/01/07/how-objects-are-sent-to-and-from-remote-sessions/,因此服务器端类型不是您此时应该使用的类型。您需要做的只是类似

            Command getmbPerms = new Command("Get-MailboxPermission");
            getmbPerms.Parameters.Add("Identity", Mailbox);
            Pipeline plPileLine = Runspace.CreatePipeline();
            plPileLine.Commands.Add(getmbPerms);
            Collection<PSObject> RsResultsresults = plPileLine.Invoke();
            foreach (PSObject obj in RsResultsresults)
            {
                Console.WriteLine(obj.Properties["User"].Value.ToString());
                PSObject AccessRights = (PSObject)obj.Properties["AccessRights"].Value;
                System.Collections.ArrayList AccessRightsCol = (System.Collections.ArrayList)AccessRights.BaseObject;
                foreach (String Permission in AccessRightsCol)
                {
                    Console.WriteLine(Permission);
                }
    
            }
            plPileLine.Stop();
    

    然后将枚举从字符串中解析出来。当您为用户设置权限时,AccessRights 参数只是一个与服务器端枚举匹配的字符串。

            Command AddPermissions = new Command("Add-MailboxPermission");
            AddPermissions.Parameters.Add("Identity", Mailbox);
            AddPermissions.Parameters.Add("User", UserName);
            AddPermissions.Parameters.Add("AccessRights", "FullAccess");
            AddPermissions.Parameters.Add("AutoMapping", false);
    

    【讨论】:

    • 嗨格伦谢谢你的回复。我之前确实尝试过,但再次尝试并可以确认尝试强制转换 Microsoft.Exchange.RecipientTasks.MailboxRights []。作为 PSObject 失败并出现“无法转换为类型”错误。我开始认为这可能是不可能的:(
    • 对我来说听起来不正确,我发布的是工作代码,听起来你在其他地方有问题(例如,你没有使用远程 powershell,也许你已经加载了管理单元??)。如果您在调试器中运行它,您应该能够看到类型。
    猜你喜欢
    • 2016-09-28
    • 2014-08-06
    • 2020-06-09
    • 2019-03-02
    • 2015-10-27
    • 2012-08-03
    • 2014-08-10
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多