Testovací akce skriptu probíhajících úloh úložiště systému Microsoft Windows Server 2016

Microsoft.Windows.Server.10.0.Storage.StorageSpacesDirect.OngoingJobs.GetPropertyBagProbeAction (ProbeActionModuleType)

Typ testovací akce, která aktivuje skript probíhajících úloh úložiště.

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityInternal
RunAsMicrosoft.Storage.Library.MonitoringRunAsProfile
InputTypeSystem.BaseData
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
Script ProbeAction Microsoft.Windows.PowerShellPropertyBagProbe Default

Source Code:

<ProbeActionModuleType ID="Microsoft.Windows.Server.10.0.Storage.StorageSpacesDirect.OngoingJobs.GetPropertyBagProbeAction" RunAs="MicrosoftStorageLibrary!Microsoft.Storage.Library.MonitoringRunAsProfile" Accessibility="Internal">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="StorageClassName" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="StorageObjectUniqueID" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ObjectId" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TargetId" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" maxOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="Script" TypeID="Windows!Microsoft.Windows.PowerShellPropertyBagProbe">
<ScriptName>GetOngoingJobsScript.ps1</ScriptName>
<ScriptBody><Script>param([string] $storageClassName, [string] $targetInstanceUniqueID, [string] $ObjectId, [string] $TargetId)

#general variables
#-----------------
$errorActionPreference = 'Stop'
$momAPI = New-Object -comObject 'MOM.ScriptAPI'

$errEvent = [System.Diagnostics.EventLogEntryType]::Error;
$infoEvent = [System.Diagnostics.EventLogEntryType]::Information;

#Storage Monitoring Event Ids
$GenericInformationEvent = 8671;
$GenericFailureEvent = 8672;


$scriptName = "GetOngoingJobsScript.ps1"
$script:traceMsg = "";
#-----------------

Function AddTraceMessage
{
param($message)
$timeStamp = (get-date -format "HH:mm:ss:fff");
$script:traceMsg = $script:traceMsg + "`n[" + $timeStamp + "] " + $message;
}

#Create Storage Metrics property bag data
$storageObject = $null

Try
{
$error.Clear();

if ($storageClassName -eq "MSFT_StorageSubSystem")
{
$storageObject = Get-StorageSubsystem -UniqueID $targetInstanceUniqueID
}
elseif($storageClassName -eq "MSFT_Volume")
{
$storageObject = Get-Volume -UniqueID $targetInstanceUniqueID
}
elseif ($storageClassName -eq "MSFT_FileShare")
{
$storageObject = Get-FileShare -UniqueID $targetInstanceUniqueID
}

if ($storageObject -eq $null)
{
#Throw [System.NullReferenceException] -join("Can't find Storage Object with UniqueID = ", $targetInstanceUniqueID);
return
}

#------------
$ongoingJobs = @()
$ongoingJobsList = @()
$ongoingJobs += $storageObject | Get-StorageHealthAction
if ($ongoingJobs -ne $null -and $ongoingJobs.Count -gt 0)
{
foreach ($ongoingJob in $ongoingJobs)
{
$propertyBag = $momAPI.CreatePropertyBag()
$propertyBag.AddValue("StorageObjectUniqueID", $targetInstanceUniqueID);
$propertyBag.AddValue("ObjectId", $ObjectId);
$propertyBag.AddValue("TargetId", $TargetId);
$ongoingJobsList += $ongoingJob.UniqueID;
$propertyBag.AddValue("UniqueID", $ongoingJob.UniqueID);
$propertyBag.AddValue("Reason", $ongoingJob.Reason);
$propertyBag.AddValue("Description", $ongoingJob.Description);
$propertyBag.AddValue("Status", $ongoingJob.Status);
$propertyBag.AddValue("PercentComplete", $ongoingJob.PercentComplete);
$propertyBag.AddValue("PropertyBagType", "Item");
$propertyBag
}
}
$propertyBag = $momAPI.CreatePropertyBag()
$propertyBag.AddValue("Reason", $ongoingJob.Reason);
$propertyBag.AddValue("Description", "");
$propertyBag.AddValue("Status", "");
$propertyBag.AddValue("PercentComplete", "");
$propertyBag.AddValue("StorageObjectUniqueID", $targetInstanceUniqueID);
$propertyBag.AddValue("TargetId", $TargetId);
$propertyBag.AddValue("ObjectId", $ObjectId);
$propertyBag.AddValue("PropertyBagType", "List");
$listOfObjects = $ongoingJobsList -join ','
$propertyBag.AddValue("UniqueID", $listOfObjects);
$propertyBag
#------------
}
Catch
{
AddTraceMessage -message $_.Exception.Message
}
Finally
{
if ($error -ne $null -and $error.Count -gt 0 -and $error[0] -ne $null)
{
$momAPI.LogScriptEvent($scriptName, $GenericFailureEvent, 1, ("TargetId: " + $targetInstanceUniqueID + "`n" + $error[0].ToString()));
}

if ($script:traceMsg -ne $null)
{
#Debug
#$momAPI.LogScriptEvent($scriptName, $GenericInformationEvent, 0, $script:traceMsg);
}
}</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>storageClassName</Name>
<Value>$Config/StorageClassName$</Value>
</Parameter>
<Parameter>
<Name>targetInstanceUniqueID</Name>
<Value>$Config/StorageObjectUniqueID$</Value>
</Parameter>
<Parameter>
<Name>ObjectId</Name>
<Value>$Config/ObjectId$</Value>
</Parameter>
<Parameter>
<Name>TargetId</Name>
<Value>$Config/TargetId$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
<StrictErrorHandling>true</StrictErrorHandling>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="Script"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>