如何在 C# 中以编程方式从 MailboxDatabase 获取 DatabaseCopy(在 C# 中包装 Exch

本文关键字:DatabaseCopy 获取 包装 MailboxDatabase Exch 方式 编程 | 更新日期: 2023-09-27 17:56:53

我正在用C#包装ExchangeManagementShell Cmdlets,以编程方式执行cmdlets(请参阅__http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/155504b3-ffe3-4bdf-887a-1e61842a8697)

我知道邮箱数据库的"数据库副本"属性包含副本。但是我不确定如何解析 deerilzied 数据库副本数据以获取属性。

请参阅下面的代码片段。我基本上是在分析 Get-MailboxDatabase cmdlet 结果以获取我们感兴趣的属性。不确定,如何从中获取数据库副本。

foreach (PSObject cmdletResults in this.Execute("Get-MailboxDatabase"))
{
   MailboxDatabase mdb = new MailboxDatabase();
   mdb.ExchangeApplicationSystemGlobalId = this.ExchangeApplicationSystem.GlobalId;
   mdb.Name = cmdletResults.Properties["Name"].Value.ToString();
   mdb.MountedOnServer = cmdletResults.Properties["Server"].Value.ConvertToString();
   mdb.EdbFilePath = cmdletResults.Properties["EdbFilePath"].Value.ConvertToString();
   mdb.LogFolderPath = cmdletResults.Properties["LogFolderPath"].Value.ConvertToString();
   mdb.LogFilePrefix = cmdletResults.Properties["LogFilePrefix"].Value.ConvertToString();
   mdb.Guid = cmdletResults.Properties["Guid"].Value.ToString();
   string mt = cmdletResults.Properties["MasterType"].Value.ConvertToString();
   if (!string.IsNullOrEmpty(mt))
   {
      mdb.MasterType = mt.ToEnum(MasterType.Unknown);
   }
   mdb.MasterServerOrAvailabilityGroup = cmdletResults.Properties["MasterServerOrAvailabilityGroup"].Value.ConvertToString();
   PSObject pso = cmdletResults.Properties["Servers"].Value as PSObject;
   if (null != pso
          && null != pso.BaseObject)
   {
       ArrayList servers = pso.BaseObject as ArrayList;
       if (null != servers)
       {
           mdb.Servers = servers.ToArray().Where(server => null != server)
                                .Select(server => server.ToString())
                                .ToArray();
       }
    }
}                    

如何在 C# 中以编程方式从 MailboxDatabase 获取 DatabaseCopy(在 C# 中包装 Exch

即使来自PowerShell,它们也是普通字符串。

PS C:> $md.类型PS C:> $md.DatabaseCopyies.gettype()

公共的 是序列号基本类型-------- -------- ---- --------True True ArrayList System.Object

PS C:> $md.DatabaseCopyies[0].gettype()

公共的 是序列号基本类型-------- -------- ---- --------True True String System.Object

PS C:> $md.gettype()方法调用失败,因为 [反序列化.Microsoft.交换.数据.目录.系统配置.邮箱数据库] doesn 不包含名为"gettype"的方法。行:1 字符:12+ $md.gettype <<<<() + 类别信息 : 无效操作: (获取类型:字符串) [], 运行时异常 + 完全限定错误 ID : 方法未找到

所以,看起来我别无选择。我将为我的用例寻找解决方法。

问候空想家