Я оборачиваю командлеты 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();
}
}
}