Microsoft.Exchange.15.Custom.MailboxDatabase.Discovery
Microsoft.Exchange.15.Custom.MailboxDatabase.Discovery (Discovery)
Element properties:
Object Discovery Details:
Member Modules:
Source Code:
<Discovery ID="Microsoft.Exchange.15.Custom.MailboxDatabase.Discovery" Enabled="true" Target="Exc15!Microsoft.Exchange.15.Server" ConfirmDelivery="true" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.Exchange.15.Custom.MailboxDB"/>
<DiscoveryRelationship TypeID="Microsoft.Exchange.15.DatabaseAvailabilityGroup.Contains.Microsoft.Exchange.15.Custom.MailboxDB"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverExc15.Mailboxdb.ps1</ScriptName>
<ScriptBody><Script>
#Set variables
$DISCOVERY_STARTED_INF_ID = 1470;
$DISCOVERY_ENDED_INF_ID = 1471;
$DISCOVERY_PROGRESS_INF_ID = 1472;
$EVENT_SOURCE = 'MicrosoftExchangeDBiscovery.ps1';
$EVENT_TYPE_ERROR = 1;
$EVENT_TYPE_WARNING = 2;
$EVENT_TYPE_INFORMATION = 4;
$infoOutput = "Exchange Server Mailbox Database Discovery Script`n" `
$computerPrincipalName = "$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$"
$computerNetbiosName = "$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetbiosComputerName$"
$sourceId = "$MPElement$"
$managedEntityId = "$Target/Id$"
$verboseLoggingString="True"
$description = "Exchange 2013 Mailbox Database"
$excservername="$Target/Property[Type="Exc15!Microsoft.Exchange.15.Server"]/Name$"
$api = New-Object -comObject MOM.ScriptAPI
$message=$infoOutput + "Discovery Script started for .`n Server: " + $computerPrincipalName+" ; "+$sourceId+" "+$managedEntityId
$api.LogScriptEvent($EVENT_SOURCE,1400, 4, $message);
Function Load-ExchangeSnapin
{
if (! (Get-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 -ErrorAction:SilentlyContinue) )
{
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
}
}
Load-ExchangeSnapin
$discovery = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)
# Get the ExchangeServer object.
$exchangeServer = Get-ExchangeServer -Identity $computerPrincipalName;
if ($exchangeServer -eq $null)
{
$message='Cannot find exchnage server'
$api.LogScriptEvent($EVENT_SOURCE,1403, 2, $message);
}
$count=0
####create instance for the dag
$mailboxServerInDag = $exchangeServer | where { $_.DatabaseAvailabilityGroup -ne $null; };
if ($mailboxServerInDag -ne $null)
{
$orgCfg = Get-OrganizationConfig -DomainController $exchangeServer.OriginatingServer
$orgName = $orgCfg.Identity.Name;
$dagName = $mailboxServerInDag.DatabaseAvailabilityGroup.Name;
$e15dag = Get-DatabaseAvailabilityGroup -Identity $dagName -Status
$daginstance = $discovery.CreateClassInstance("$MPElement[Name='Exc15!Microsoft.Exchange.15.DatabaseAvailabilityGroup']$");
$daginstance.AddProperty("$MPElement[Name='Exc15!Microsoft.Exchange.15.Service']/Name$", ($orgName+' - '+$dagName));
}
$DBs=Get-MailboxDatabase -Server $computerPrincipalName -Status|where {$_.IsMailboxDatabase -match 'true'}
foreach($DB in $DBs)
{
IF($DB.Server.Name -eq $exchangeServer.Name)
{
$MailboxDB = $discovery.CreateClassInstance("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']$");
############## Initialize
$version = $DB.ExchangeVersion.Major.ToString()+ '.' + $DB.ExchangeVersion.Minor.ToString() + '.' + $DB.ExchangeVersion.ExchangeBuild.ToString();
$logpath=$null
$edbpath=$null
$count+=1
$IsMountAtStartup = $false;
$IsMounted= $false;
if($DB.Mounted -eq $null)
{
$IsMounted = $false
}
Else
{
$IsMounted=$DB.Mounted
}
if($DB.MountAtStartup)
{
$IsMountAtStartup = $true
}
###############
$logpath=$DB.LogFolderPath.PathName.ToString()
$edbpath=$DB.EdbFilePath.PathName.ToString()
IF ($db.Mastertype -eq 'DatabaseAvailabilityGroup'){
$DAG=$DB.MAsterServerOrAvailabilityGroup.Name
$DBname =$DB.Identity.Name.ToString() +' on '+$DB.Server+' - '+$DAG}
Else
{
$DBname =$DB.Identity.Name.ToString() +' on '+$DB.Server
}
$copies=@()
$DB.AllDatabasecopies|?{$copies+=$_.DatabaseName+' - '+$_.ActivationPreference+' /'}
$MailboxDB.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerPrincipalName);
$MailboxDB.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $DBName);
$MailboxDB.AddProperty("$MPElement[Name='Exc15!Microsoft.Exchange.15.Server']/Name$", $excservername);
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/DatabaseName$", $DB.Identity.Name.ToString());
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/ExchangeVersion$", $version);
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/EdbFilePath$", "$edbpath");
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/LogFolderPath$", "$logpath");
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/IsMailboxDatabase$", "true");
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/MountAtStartup$", $IsMountAtStartup);
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/Mounted$", $IsMounted);
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/MountedOnServer$", $DB.MountedOnServer);
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/DatabaseAvailabilityGroup$", $DAG);
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/IssueWarningQuotaMB$", $DB.IssueWarningQuota.Value.toMB());
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/ProhibitSendQuotaMB$", $DB.ProhibitSendQuota.Value.toMB());
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/ProhibitSendReceiveQuotaMB$", $DB.ProhibitSendReceiveQuota.Value.toMB());
$MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/RecoverableItemsQuotaMB$", $DB.RecoverableItemsQuota.Value.toMB());
# $MailboxDB.AddProperty("$MPElement[Name='Microsoft.Exchange.15.Custom.MailboxDB']/DatabaseCopies$", $copies);
$message=$DB.Identity.Name.ToString()
$discovery.AddInstance($MailboxDB);
$api.LogScriptEvent($EVENT_SOURCE,1401, 4, $message);
$copies=$null;
####add containment relationships
if ($mailboxServerInDag -ne $null)
{
$relationshipInstance = $discovery.CreateRelationshipInstance("$MPElement[Name='Microsoft.Exchange.15.DatabaseAvailabilityGroup.Contains.Microsoft.Exchange.15.Custom.MailboxDB']$")
$relationshipInstance.Source = $daginstance
$relationshipInstance.Target = $MailboxDB
$discovery.AddInstance($relationshipInstance)
}
}
}
$message="Finishing Discovery"
$api.LogScriptEvent($EVENT_SOURCE,1402, 4, $message);
$api.return($discovery);
$discovery
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>