我正在尝试通过自动交换管道自动化使用远程PowerShell获取和设置邮箱权限的进程。 Get-MailboxPermission命令输出的AccessRights属性的类型为Microsoft.Exchange.RecipientTasks.MailboxRights []。我无法在nuget的任何地方找到这个命名空间,据我所知,它似乎不是EWS api的一部分。有谁知道可以找到这个命名空间的位置,所以我可以在我的项目中引用它,或者是否有办法将输出转换为标准对象类型?
谢谢
答案 0 :(得分:0)
在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();
然后只需从字符串解析Enums。为用户设置权限时,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);