var EXPECTED_ARGUMENT_COUNT = 7;
var UNEXPECTED_ARGUMENT_COUNT_ERROR_ID = 101;
var DISCOVERY_STARTED_INF_ID = 1470;
var DISCOVERY_ENDED_INF_ID = 1471;
var DISCOVERY_PROGRESS_INF_ID = 1472;
var EVENT_SOURCE = "MicrosoftExchangeDCRoleDiscovery.js";
var EVENT_TYPE_ERROR = 1;
var EVENT_TYPE_WARNING = 2;
var EVENT_TYPE_INFORMATION = 4;
var oAPI = new ActiveXObject("Mom.ScriptAPI");
var argumentsStr = "";
for (var i = 0; i < WScript.Arguments.length; i++)
{
argumentsStr = argumentsStr.concat("\"", WScript.Arguments(i), "\" ");
}
if (WScript.Arguments.length != EXPECTED_ARGUMENT_COUNT)
{
oAPI.LogScriptEvent(
EVENT_SOURCE,
UNEXPECTED_ARGUMENT_COUNT_ERROR_ID,
EVENT_TYPE_ERROR,
"Expected " + EXPECTED_ARGUMENT_COUNT + " arguments. But there were " + WScript.Arguments.length + " arguments. Exiting script.\n Arguments:" + argumentsStr);
WScript.Quit(-1);
}
// Pick up all command line arguments
var sourceType = WScript.Arguments(0);
var sourceId = WScript.Arguments(1); // The GUID of the Discovery that launched the script.
var managedEntityId = WScript.Arguments(2); // The GUID of the computer class targeted by the script.
var computerPrincipalName = WScript.Arguments(3); // The FQDN of the computer targeted by the script.
var computerNetbiosName = WScript.Arguments(4); //netbios name. short name of machine.
var computerActiveDirectorySite = WScript.Arguments(5);
var verboseLoggingString = WScript.Arguments(6);
// Convert variables from string to bool.
var verboseLogging = (verboseLoggingString.toLowerCase() == "true") ? true : false;
var infoOutput = "DC Role Discovery script \n"
+ " Message: ";
var discoveryData = oAPI.CreateDiscoveryData(sourceType, sourceId, managedEntityId);
// Define the property values for this class instance.
// The available properties are determined by the
// Management Pack that defines the class.
// Construct class's Name key property.
var roleDisplayName = "DC Health";
var dcRoleName = computerNetbiosName + " (" + roleDisplayName + ") - " + computerActiveDirectorySite;
var instanceDomainControllerRole = discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Exchange.2010.DomainControllerRole']$");
instanceDomainControllerRole.AddProperty("$MPElement[Name='Microsoft.Exchange.2010.ServerRole']/RoleName$", dcRoleName); // RoleName comes from base class
instanceDomainControllerRole.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", computerPrincipalName);
discoveryData.AddInstance(instanceDomainControllerRole);
// discover DomainControllerFunctionalityServer which is a target component class for monitors. no attributes of its own.
// key attribute is "ComponentName"
var componentDisplayName = "DC Functionality";
var dcServerComponentName = componentDisplayName + " - " + dcRoleName;
var instanceDomainControllerFunctionalityServer = discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Exchange.2010.DomainControllerFunctionalityServer']$");
instanceDomainControllerFunctionalityServer.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", computerPrincipalName);
instanceDomainControllerFunctionalityServer.AddProperty("$MPElement[Name='Microsoft.Exchange.2010.Component']/ComponentName$", dcServerComponentName);
instanceDomainControllerFunctionalityServer.AddProperty("$MPElement[Name='Microsoft.Exchange.2010.ServerRole']/RoleName$", dcRoleName);
discoveryData.AddInstance(instanceDomainControllerFunctionalityServer);
// Discover DomainControllerFunctionalityService, which is a site level instance.
// represents site level health of all domain controllers
var instanceDomainControllerFunctionalityService = discoveryData.CreateClassInstance("$MPElement[Name='Microsoft.Exchange.2010.DomainControllerFunctionalityService']$");
instanceDomainControllerFunctionalityService.AddProperty("$MPElement[Name='Microsoft.Exchange.2010.Service']/ServiceName$", "Domain Controller Functionality Service - " + computerActiveDirectorySite);
instanceDomainControllerFunctionalityService.AddProperty("$MPElement[Name='Microsoft.Exchange.2010.Service']/InstanceName$", computerActiveDirectorySite);
instanceDomainControllerFunctionalityService.AddProperty("$MPElement[Name='Microsoft.Exchange.2010.Service']/ActiveDirectorySite$", computerActiveDirectorySite);
discoveryData.AddInstance(instanceDomainControllerFunctionalityService);
// Create containment relationship between Microsoft.Exchange.2010.Server and ServerRole
var oServiceContainsDCFunctionalityServer = discoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.Exchange.2010.DomainControllerFunctionalityService.Contains.Microsoft.Exchange.2010.DomainControllerFunctionalityServer']$");
oServiceContainsDCFunctionalityServer.Source = instanceDomainControllerFunctionalityService;
oServiceContainsDCFunctionalityServer.Target = instanceDomainControllerFunctionalityServer;
discoveryData.AddInstance(oServiceContainsDCFunctionalityServer);
// Submit the discovery data for processing.
oAPI.Return(discoveryData);