This topic describes trigger state data and provides an example of how trigger state data can be used in a script file.
When a command or PowerShell script action is configured in a task with the Append the associated Task Trigger Data objects option, trigger state data objects will be appended in the script file when triggers fire in a task. The data will be returned in an array of objects called "TriggerState". The data returned from the script will depend on the type of triggers that are configured. Data can be returned for monitor triggers and checkpoint triggers. Trigger state data can be compared using other cmdlets to obtain additional information.
If a monitor trigger is configured, a “MonitorTriggerState” object will be appended with the following fields:
MonitoredObjectId |
: acd50b370a6e4b8986e0fa485fabfd55 |
TriggerType |
: MonitorTrigger |
TriggerTime |
: 8/12/2013 1:39:04 PM |
Caption |
: Critical: Host Access of Virtual disk 2 from Server Group is Access not allowed |
ManualInvocation |
: False |
If a checkpoint trigger is configured, the "CheckpointTriggerState object will be appended with the following fields:
VirtualDiskId |
: 4ff6547ec8bc49f1b2ef048000d839ee |
TriggerType |
: MessageTrigger |
TriggerTime |
: 8/12/2013 1:38:26 PM |
Caption |
: Checkpoint marker received for replicated virtual disk |
ManualInvocation |
: False |
In the MonitorTriggerState object, the MonitoredObjectId can be used to resolve the exact object that caused the monitor state to trigger the action and to perform additional actions in the script. In the CheckpointTriggerState object, the VirtualDiskID can be used to resolve the exact object that received the checkpoint marker and to perform additional actions in the script.
The following simple script is an example that demonstrates a couple ways that the trigger states can be accessed from a script file. In the example, assume that a task is created with triggers that will return both types of trigger data:
o Configure two triggers:
· Monitor
for a change in a disk pool state
Monitor type = Disk pools/State for selected pool object. Trigger on state
"> Healthy".
· Replication checkpoint received
o Configure an action
to run the PowerShell script file.
Select the server and path where the script file is located (for instance
C:\ScriptFiles\ExampleScript.ps1).
Parameters are used to add script specific data from the task. Add script
parameters, for example -param1 "value1" -paramarray
"value1", "value2", "value3".
Select the check box to Append the associated
Task Trigger Data objects, data will not be returned without this
selection.
(See Automated Tasks for more instructions and information on configuring task triggers and actions.)
When either triggers fires, the associated trigger state data objects will be appended to the script file action as a list of trigger states that caused the action to occur.
In this case, if the disk pool state changes, in the MonitorTriggerState object, the MonitoredObjectId is used to resolve the exact object that caused the monitor state to trigger the action. If a replication checkpoint is received, in the CheckpointTriggerState object, the VirtualDiskID is used to resolve the exact object that received the checkpoint marker.
param([string]$param1, [string[]]$paramArray, [object[]]$TriggerStates)
# Initializing PowerShell Environment
$bpKey = 'BaseProductKey'
$regKey = get-Item "HKLM:\Software\DataCore\Executive"
$strProductKey = $regKey.getValue($bpKey)
$regKey = get-Item "HKLM:\$strProductKey"
$installPath = $regKey.getValue('InstallPath')
if (!(get-module -name DataCore.Executive.Cmdlets))
{
Import-Module "$installPath\DataCore.Executive.Cmdlets.dll" -ErrorAction:Stop -Warningaction:SilentlyContinue
}
# Connect to SANsymphony
Connect-DcsServer
sleep -seconds 1 #allows time for connecting
Write-Output "Starting execution"`n | Out-File "C:\ScriptOutput\Testlog.txt" -append
#lists parameter and parameter array values that were input
Write-Output "Param1 is <$param1>" | Out-File "C:\ScriptOutput\Testlog.txt" -append
if ($paramArray -ne $null -and $paramArray.Length -gt 0)
{
Write-Output "ParamArray values are:" | Out-File "C:\ScriptOutput\Testlog.txt" -append
foreach ($p2 in $paramArray)
{
Write-Output $p2 | Out-File "C:\ScriptOutput\Testlog.txt" -append
}
Write-Output `n | Out-File "C:\ScriptOutput\Testlog.txt" -append
}
if ($TriggerStates -ne $null)
{
write-Output "Trigger state data is appended."`n | out-file "C:\ScriptOutput\Testlog.txt" -append
foreach($trigger in $triggerStates)
{
#outputs Trigger state objects for all configured triggers
write-Output "$($trigger.GetType()):" | out-file "C:\ScriptOutput\Testlog.txt" -append
write-Output $trigger | out-file "C:\ScriptOutput\Testlog.txt" -append
if($trigger -is [DataCore.Executive.CheckpointTriggerState])
{
#outputs the ID for the replication checkpoint virtual disk
Write-Output "VirtualDiskId: $($trigger.VirtualDiskId)"`n | Out-File "C:\ScriptOutput\Testlog.txt" -append
Write-Output "VirtualDiskData object for VirtualDiskId:" | Out-File "C:\ScriptOutput\Testlog.txt" -append
#outputs the object for the replication checkpoint virtual disk
Get-DcsVirtualDisk -VirtualDisk $trigger.VirtualDiskId | Out-File "C:\ScriptOutput\Testlog.txt" -append
Write-Output `n | Out-File "C:\ScriptOutput\Testlog.txt" -append
}
if($trigger -is [DataCore.Executive.MonitorTriggerState])
{
#outputs the ID for the disk pool being monitored
Write-Output "MonitoredObjectId: $($trigger.MonitoredObjectId)"`n | Out-File "C:\ScriptOutput\Testlog.txt" -append
Write-Output "DiskPoolData objects for MonitoredObjectId:" | Out-File "C:\ScriptOutput\Testlog.txt" -append
#outputs the object for the replication checkpoint virtual disk
Get-DcsPool -Pool $trigger.MonitoredObjectId | Out-File "C:\ScriptOutput\Testlog.txt" -append
Write-Output "MonitorData objects for the pool:" | Out-File "C:\ScriptOutput\Testlog.txt" -append
#outputs each disk pool monitor
Get-DcsMonitor -Monitor $trigger.MonitoredObjectId | Out-File "C:\ScriptOutput\Testlog.txt" -append
Write-Output `n | Out-File "C:\ScriptOutput\Testlog.txt" -append
}
}
}
Write-Output "Execution Complete"`n | Out-File "C:\ScriptOutput\Testlog.txt" -append