Как программно получить DatabaseCopies из MailboxDatabase на С# (обернутые командлеты ExchangeMangementShell на С#)?

Я оборачиваю командлеты ExchangeManagementShell в C# для программного выполнения командлетов (см.

Я знаю, что свойство «databasecopies» базы данных mailboxdatabase содержит копии. Но я не уверен, как разобрать десерилированные данные копий базы данных, чтобы получить нужные данные.

См. приведенный ниже фрагмент кода. Я в основном анализирую результаты командлета Get-MailboxDatabase, чтобы получить интересующие нас свойства. Однако не уверен, как получить из него DatabaseCopies.

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();
       }
    }
}                    

person Dreamer    schedule 01.02.2013    source источник


Ответы (1)


Даже из PowerShell они приходят в виде простых строк.

PS C:> $md.type PS C:> $md.DatabaseCopies.gettype()

IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True ArrayList System.Object

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

IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True String System.Object

PS C:> Вызов метода $md.gettype() завершился неудачно, поскольку [Deserialized.Microsoft.Exchange.Data.Directory.SystemConfiguration.MailboxDatabase] не содержит метод с именем 'gettype'. В строке: 1 символ: 12 + $md.gettype ‹‹‹‹ () + CategoryInfo: InvalidOperation: (gettype:String) [], RuntimeException + FullyQualifiedErrorId: MethodNotFound

Так что, похоже, у меня нет выбора. Я буду искать работу для моего варианта использования.

С уважением, Мечтатель

person Dreamer    schedule 03.02.2013
comment
Вы нашли работу вокруг? У меня точно такая же проблема. не может получить DatabaseCopies в коде С#. - person urlreader; 30.12.2015