Automating FEP Reports

Applies To: Forefront Endpoint Protection

You can automate retrieval of FEP reports by using Windows PowerShell.

Prerequisites

In order to create a script similar to the example in this topic, you must have the following prerequisite software:

  • Windows PowerShell 2.0

The following example script demonstrates how to retrieve a FEP computer list report as an XML object and then display the computer list.

$ReportServer = "ReportServer.contoso.com" #Change the value in quotes to your report server FQDN.
$SiteCode = "FEP" #Change the value in quotes to your site code.

#URI to the .asmx file on the report server – change the value in quotes to the appropriate path on your report server.  
$URI  = "https://$ReportServer//ReportServer//ReportExecution2005.asmx?wsdl"

#Report Path – to retrieve a different report, replace the name of the report             
$ReportPath = "/Forefront Endpoint Protection_$SiteCode/Antimalware/Computer List Report"

# Create the web service proxy for the reports
New-WebServiceProxy -Uri $URI -UseDefaultCredential -namespace "ReportExecution2005" | out-null
            
$ReportService = new-object ReportExecution2005.ReportExecutionService            
$ReportService.Credentials = [System.Net.CredentialCache]::DefaultCredentials             
            
# Load report
$ReportService.GetType().GetMethod("LoadReport").Invoke($ReportService, @($ReportPath, $null)) | out-null                         

# Report Parameters            
# Depending on the number of parameters being used in the report, you may need to add or remove parameters. Specify by changing the Param1.Value line.

# Report Time Span 
# 1 - Custom  - Should be used along with CustomStartDate and CustomEndDate 
# 2 - Day
# 3 - Week
# 4 - Month
# 5 - Quarter
# 6 - Year

$param1 = new-object ReportExecution2005.ParameterValue         
$param1.Name = "ReportSpan" 
$param1.Value = 3

# Number of computers to which to limit the report. -1 specifies that there is no limit.
$param2 = new-object ReportExecution2005.ParameterValue            
$param2.Name = "NumberOfReturnedComputersParameter" 
$param2.Value = -1

# Security State parameter:
# 1 - Clean
# 2 - Recent malware activity (last 24 hours)
# 3 - Action Required
# 4 - Infected

$param3 = new-object ReportExecution2005.ParameterValue            
$param3.Name = "SecurityStateParameter"            
$param3.Value = 2
           
# The following ReportScope parameter is optional; it limits the report to a single collection.
# The ID can be found in FEPDW (FEPDW_[SiteCode]) database using the following query: 
# SELECT * FROM vwFEP_Common_CollectionLookupDimension

#$param4 = new-object ReportExecution2005.ParameterValue            
#$param4.Name = "ReportScope" 
#$param4.Value = "1002"

$parameters = [ReportExecution2005.ParameterValue[]] ($param1, $param2, $param3)
            
$ExecParams = $ReportService.SetExecutionParameters($parameters, "en-us");             

# For more report parameter options, see ReportExecutionService.Render Method (https://go.microsoft.com/fwlink/?LinkId=208533) on MSDN.
$format = "xml"            
$deviceinfo = ""            
$extention = ""            
$mimeType = ""            
$encoding = "UTF-8"            
$warnings = $null            
$streamIDs = $null  

$ReportAsStream = $ReportService.Render($format, $deviceInfo,[ref] $extention, [ref] $mimeType,[ref] $encoding, [ref] $warnings, [ref] $streamIDs)
$ReportAsString = [Text.Encoding]::UTF8.GetString($ReportAsStream)

$ReportAsXml = [xml]$ReportAsString.Trim()

# Access the report data using the xml object. It possible to use XPath or any XMLDocument methods to parse the xml.
$computers = $ReportAsXml.GetElementsByTagName("Detail")  

foreach ($computer in $computers)
{
Write-Host $computer.ComputerName $computer.SecurityState 
}