SCOM.Addons.MailIn.CleanEmlArchive.Rule.Datasource (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
Scheduler DataSource System.Scheduler Default
PA ProbeAction Microsoft.Windows.PowerShellPropertyBagProbe Default

Overrideable Parameters:

IDParameterTypeSelector
IntervalSecondsint$Config/IntervalSeconds$
SyncTimestring$Config/SyncTime$
TimeoutSecondsint$Config/TimeoutSeconds$
EmlArchivestring$Config/EmlArchive$
EmlRetentionHoursint$Config/EmlRetentionHours$

Source Code:

<DataSourceModuleType ID="SCOM.Addons.MailIn.CleanEmlArchive.Rule.Datasource" Accessibility="Internal" Batching="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" type="xsd:integer" name="IntervalSeconds"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="0" type="xsd:string" name="SyncTime"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" type="xsd:integer" name="TimeoutSeconds"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" type="xsd:string" name="EmlArchive"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" type="xsd:integer" name="EmlRetentionHours"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
<OverrideableParameter ID="EmlArchive" Selector="$Config/EmlArchive$" ParameterType="string"/>
<OverrideableParameter ID="EmlRetentionHours" Selector="$Config/EmlRetentionHours$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="Scheduler" TypeID="System!System.Scheduler">
<Scheduler>
<SimpleReccuringSchedule>
<Interval Unit="Seconds">$Config/IntervalSeconds$</Interval>
<SyncTime>$Config/SyncTime$</SyncTime>
</SimpleReccuringSchedule>
<ExcludeDates/>
</Scheduler>
</DataSource>
<ProbeAction ID="PA" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagProbe">
<ScriptName>Clean-EmlArchive.ps1</ScriptName>
<ScriptBody><Script>param($sourceId, $managedEntityId, $EmlArchive, $EmlRetentionHours)

$api = New-Object -ComObject 'MOM.ScriptAPI'

$Global:Error.Clear()
$ErrorActionPreference = 'Continue'

$api.LogScriptEvent('SCOM.Addons.MailIn Clean-EmlArchive.ps1',5000,4,"SCOM Addons MailIn Clean-EmlArchive Rule Started - Source $($sourceId) `
managEnt $($managedEntityId) EmlArc: $($EmlArchive) #RetentionHours:$($EmlRetentionHours) ")


if (Test-Path -Path $EmlArchive) {
$foo = "bar"
} else {
$api.LogScriptEvent('SCOM.Addons.MailIn Clean-EmlArchive.ps1',5001,1,"SCOM Addons MailIn Rule - EmlArchive folder not found!`
Looking for: $($EmlArchive). Exiting cleanup script..")
exit
}

$noEmlArchiveFiles = 0
$emlArchiveFiles = Get-ChildItem -Path $EmlArchive -Filter *.eml
$noEmlArchiveFiles = $emlArchiveFiles.Count

$arrDeletedEmlFiles = New-Object -TypeName System.Collections.ArrayList

if ($noEmlArchiveFiles -gt 1) {

foreach ($emlFile in $emlArchiveFiles) {

$timeSinceAlertInHours = (New-Timespan -Start $emlFile.LastWriteTime -End (Get-Date)).TotalHours -as [int]

If ($timeSinceAlertInHours -ge $EmlRetentionHours ) {

$emlItem = ""
$emlItem = $emlFile.Name + '_timeSinceAlertInHours_' + $timeSinceAlertInHours
$arrDeletedEmlFiles.Add($emlItem)
Remove-Item -Path $emlFile.FullName -Force

} #end If ($timeSinceAlertInHours -ge $EmlRetentionHours ) {}

} #end foreach ($emlFile in $emlArchiveFiles) {}

$title = "Removes archived eml files in folder $($EmlArchive) older than $($EmlRetentionHours) hours."
$EmlCount = $noEmlArchiveFiles
$EmlToDel = $arrDeletedEmlFiles.Count
$EmlInfo = $arrDeletedEmlFiles -join "; "

$api.LogScriptEvent('SCOM.Addons.MailIn Clean-EmlArchive.ps1',5002,4,"SCOM Addons MailIn Clean-EmlArchive Rule `
Title: $($title) `n EmlCount: $($EmlCount) `n EmlToDel: $($EmlToDel) `n EmlInfo: $($EmlInfo) ")

if ($arrDeletedEmlFiles.Count -gt 0) {
$bag = $api.CreatePropertybag()
$bag.AddValue("Title",$title)
$bag.AddValue("EmlCount",$EmlCount)
$bag.AddValue("EmlToDel",$EmlToDel)
$bag.AddValue("EmlInfo",$EmlInfo)
$bag.AddValue("Result","BAD")
$bag
} else {
$foo = 'No bag. - Rule message with 0 does not make sense.'
}

} #end if ($emlArchiveFiles.count -gt 1) {}

</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>EmlArchive</Name>
<Value>$Config/EmlArchive$</Value>
</Parameter>
<Parameter>
<Name>EmlRetentionHours</Name>
<Value>$Config/EmlRetentionHours$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="PA">
<Node ID="Scheduler"/>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
</DataSourceModuleType>