# writes the last error record to the OperationManager eventlog
function Log-ScriptError()
{
# LogScriptEvent see http://msdn.microsoft.com/en-us/library/bb437630.aspx
[int] $severity = 1
[int] $eventId = 2013
[string] $eventSourceName = 'Microsoft Dynamics NAV 2013 Management Pack'
# main()
[Boolean] $noDiscData = 1
try
{
# Create the discovery data structure that we will return the discovered objects in
$scomapi = new-object -comObject "MOM.ScriptAPI"
$discData = $scomapi.CreateDiscoveryData(0, $element, $target)
# Get a list of all tenants, for a given server instance
$foundTenants = Get-NavTenant $serverInstance
# Create SCOM objects for the NAV Tenants
foreach ($tenant in $foundTenants)
{
# Create the Tenants object and initialize it with its key properties, no matter what.
$navTenant = $discData.CreateClassInstance("$MPElement[Name='Microsoft.Dynamics.Nav.2013.Tenant']$")
$navTenant.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)
$navTenant.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $tenant.Id)
$navTenant.AddProperty("$MPElement[Name='Service!Microsoft.SystemCenter.NTService']/ServiceName$", $serviceName)
# add the WebServerInstance to the DiscoveryData object
$discData.AddInstance($navTenant)
$noDiscData = 0
}
$discData
}
catch
{
Generate-ErrorDetails "main"
Log-ScriptError
}
finally
{
# the last exception must be thrown to aleret the operator, but only if we don't have any discovery data to return.
if($noDiscData)
{
if ($Error.Count -gt 0)
{
throw $Error[0]
}
}
} </Script></ScriptBody>
<SnapIns>
<SnapIn>Microsoft.Dynamics.Nav.Management</SnapIn>
</SnapIns>
<Parameters>
<Parameter>
<Name>Target</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>element</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>principalName</Name>
<Value>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>serverInstance</Name>
<Value>$Target/Property[Type="Microsoft.Dynamics.Nav.2013.ServerInstance"]/ServerInstance$</Value>
</Parameter>
<Parameter>
<Name>serviceName</Name>
<Value>$Target/Property[Type="Service!Microsoft.SystemCenter.NTService']/ServiceName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>300</TimeoutSeconds>
<StrictErrorHandling>true</StrictErrorHandling>
</DataSource>
</Discovery>