Discover Forefront Security for Office Communications Server (Version 10) and Components

Microsoft.ForefrontServer10.FSOCS.Server.Discovery (Discovery)

Knowledge Base article:

Summary

Discovery of Forefront Security for Office Communications Server and components.

Element properties:

TargetMicrosoft.ForefrontServer10.Library.ServerRole
EnabledTrue
Frequency14400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

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

Source Code:

<Discovery ID="Microsoft.ForefrontServer10.FSOCS.Server.Discovery" Enabled="true" Target="FSS!Microsoft.ForefrontServer10.Library.ServerRole" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.Server">
<Property TypeID="FSS!Microsoft.ForefrontServer10.Library.Server" PropertyID="ServerName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.Services.MailPickupService">
<Property TypeID="FSS!Microsoft.ForefrontServer10.Library.Services.FSSMailPickupService" PropertyID="ServiceName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.Services.FSOCSRTCProxy">
<Property TypeID="Microsoft.ForefrontServer10.FSOCS.Services.FSOCSRTCProxy" PropertyID="ServiceName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.Services.FSOCSFSCController">
<Property TypeID="FSS!Microsoft.ForefrontServer10.Library.Services.FSCController" PropertyID="ServiceName"/>
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.Services">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.ScanJobs">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.RealtimeScanJobs">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.Licensing">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.Engines">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.ForefrontServer10.FSOCS.AVEngines">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>14400</IntervalSeconds>
<SyncTime/>
<ScriptName>FSOCS10Discovery.js</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</Arguments>
<ScriptBody><Script>
//-----------------------------------------------------------------
// Microsoft Forefront Server Security.
// Copyright (C) Microsoft Corporation, All rights reserved.
//-----------------------------------------------------------------

var oAPI = new ActiveXObject("MOM.ScriptAPI");
var iBaseEvent = 10100;
var iErrorEvent = iBaseEvent+1;
var iSuccessEvent = iBaseEvent+2;

var Log_Error = 1;
var Log_Warning = 2;
var Log_Info = 4;


/*
Determine Debug Mode and create log function
*/
var sScriptName = WScript.ScriptName;
var bDebug = false;
if(WScript.Arguments.length &gt; 3)
{
bDebug = WScript.Arguments(3).toLowerCase() == "true";
}

function Log(id, type, msg)
{
oAPI.LogScriptEvent(sScriptName, id, type, sScriptName + ": "+ msg);
}

if(bDebug) Log(iSuccessEvent, Log_Info, "Beginning script in DEBUG mode.");

/*
Get's a registry key's value.
NOTE: Always looks in HKLM (Local Machine).

sKey - The registry key's name
sValueName - the value's name
iValueType - the value's type - this is either a string (1) or a DWRORD (2)
*/
var oWShell = new ActiveXObject("WScript.Shell");
function RetrieveRegValue (sKey, sValueName, iValueType)
{
var sRegValue = null;
try
{
sRegValue = oWShell.RegRead("HKLM\\"+sKey+"\\"+sValueName);
}
catch (e)
{
if(bDebug) Log(iErrorEvent, Log_Warning, "Error getting key. Key: "+sKey+"\\"+sValueName);
}
return sRegValue;
}

/*
Reads the Forefront Install Path from the registry and returns it.
Returns null if it could not read the value.
*/
function GetInstallPath(sProductRegKey)
{
var sFSOCSInstallPath;
var sFFKey = "SOFTWARE\\Microsoft\\Forefront Server Security\\";
var sFFWOWKey = "SOFTWARE\\Wow6432Node\\Microsoft\\Forefront Server Security\\";

if(sFSOCSInstallPath = RetrieveRegValue(sFFKey + sProductRegKey, "InstalledPath", 1))
return sFSOCSInstallPath;

if(sFSOCSInstallPath = RetrieveRegValue(sFFWOWKey + sProductRegKey, "InstalledPath", 1))
return sFSOCSInstallPath;

return null;
}

// File System helper object
var FSO = new Object();
FSO.obj = new ActiveXObject("Scripting.FileSystemObject");
FSO.FileExists = function (sPath)
{
return FSO.obj.FileExists(sPath);
}
FSO.GetVersion = function(sPath)
{
return FSO.obj.GetFileVersion(sPath);
}
// End FSO

/*
Returns whether the installed version of forefront is a "Version 10" product
*/
function IsFF10(sInstallPath)
{
// Get the version of FSCController to see if we're Version 10
var sVersion = FSO.GetVersion(sInstallPath + "\\FSCController.exe");
if(!sVersion) return false;
return sVersion.split(".")[0] == "10";
}

/*
Execute a method (most likely an inline anonymous function), and log success or error.
Only logs success when in DEBUG mode, but always on error. When an error occurs, the
script is terminated abruptly
*/
function Ex(f, sMsg)
{
try
{
f();
}
catch(e)
{
Log(iErrorEvent, Log_Error, "Error: " + (sMsg || "Unknown error"));
WScript.Quit(1);
}

if(bDebug &amp;&amp; sMsg) Log(iSuccessEvent, Log_Info, "Success: " + sMsg);
}

// Get the command line arguments.
var sSourceId = null;
var sManagedEntityId = null;
var sTargetComputer = null;
Ex(function() { sSourceId = WScript.Arguments(0); }, "Getting SourceID Argument");
Ex(function() { sManagedEntityId = WScript.Arguments(1); }, "Getting ManagedEntityId Argument");
Ex(function() { sTargetComputer = WScript.Arguments(2); }, "Getting TargetComputer Argument");


function CreateSCOMObject(oDiscoveryData, sClassGUID, sDisplayName, sFriendlyClassName, fOtherProperties)
{
var oInstance;
Ex(function() {}, "Running Discovery Script for " + sFriendlyClassName);
Ex(function() { oInstance = oDiscoveryData.CreateClassInstance(sClassGUID); },
"Creating Class Instance");
Ex(function() { oInstance.AddProperty("$MPElement[Name='FSS!Microsoft.ForefrontServer10.Library.Server']/ServerName$",sTargetComputer); },
"Adding ServerName property");
Ex(function() { oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$",sTargetComputer); },
"Adding PrincipalName property");
Ex(function() { oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$",sDisplayName || sTargetComputer); },
"Adding DisplayName property");

if(fOtherProperties) fOtherProperties(oInstance);

Ex(function() { oDiscoveryData.AddInstance(oInstance); }, "Adding Instance");

Log(iSuccessEvent, Log_Info, "Information: Discovered " + sFriendlyClassName);
}

// attempt to determine whether the forefront registry key exists ...
var sInstallPath = GetInstallPath("Office Communications Server");
if(bDebug) Log(iSuccessEvent, Log_Info, "Install Path: "+sInstallPath);
var oDiscoveryData = oAPI.CreateDiscoveryData(0, sSourceId, sManagedEntityId);
if(sInstallPath)
{
// if it does, figure out if it's Version 10
var bIs10 = IsFF10(sInstallPath);
if(bDebug) Log(iSuccessEvent, Log_Info, "Is Version 10: "+bIs10);
if(bIs10)
{
if(bDebug) Log(iSuccessEvent, Log_Info, "Detected Forefront Server for Office Communications Server (Version 10)");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Server']$",
"Microsoft Forefront Security for Office Communications Server (Version 10)",
"ForefrontServer10.FSOCS.Server");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Licensing']$",
"Licensing",
"ForefrontServer10.FSOCS.Licensing");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Services']$",
"Services",
"ForefrontServer10.FSOCS.Services");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.ScanJobs']$",
"ScanJobs",
"ForefrontServer10.FSOCS.ScanJobs");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Engines']$",
"Engines",
"ForefrontServer10.FSOCS.Engines");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.AVEngines']$",
"Anti-Virus Engines",
"ForefrontServer10.FSOCS.AVEngines");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.RealtimeScanJobs']$",
"IM Scan Job",
"ForefrontServer10.FSOCS.RealtimeScanJob");

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Services.MailPickupService']$", "FSEMailPickup",
"ForefrontServer10.FSOCS.Services.MailPickupService",
function(oInstance) { oInstance.AddProperty("$MPElement[Name='FSS!Microsoft.ForefrontServer10.Library.Services.FSSMailPickupService']/ServiceName$",
"FSEMailPickup"); });

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Services.FSOCSFSCController']$", "FSCController",
"ForefrontServer10.FSOCS.Services.FSOCSFSCController",
function(oInstance) { oInstance.AddProperty("$MPElement[Name='FSS!Microsoft.ForefrontServer10.Library.Services.FSCController']/ServiceName$",
"FSCController"); });

CreateSCOMObject(oDiscoveryData,
"$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Services.FSOCSRTCProxy']$", "ForefrontRTCProxy",
"ForefrontServer10.FSOCS.Services.FSOCSRTCProxy",
function(oInstance) { oInstance.AddProperty("$MPElement[Name='Microsoft.ForefrontServer10.FSOCS.Services.FSOCSRTCProxy']/ServiceName$",
"ForefrontRTCProxy"); });
}
}
oAPI.Return(oDiscoveryData)
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>