Microsoft.Exchange.15.Custom.MailboxDatabase.Discovery

Microsoft.Exchange.15.Custom.MailboxDatabase.Discovery (Discovery)

Element properties:

TargetMicrosoft.Exchange.15.Server
EnabledTrue
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedPowerShell.DiscoveryProvider Default

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>