The PostTransferScript is run on the protected machine after transferring a snapshot.
# receiving parameter from transfer job
param([object] $TransferPostscriptParameter)
# building path to Agent's Common.Contracts.dll and loading this assembly
$regLM = [Microsoft.Win32.Registry]::LocalMachine
$regLM = $regLM.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AppRecovery Agent 5')
$regVal = $regLM.GetValue('InstallLocation')
$regVal = $regVal + 'Common.Contracts.dll'
[System.Reflection.Assembly]::LoadFrom($regVal)  |  out-null
# Converting input parameter into specific object
$TransferPostscriptParameterObject = $TransferPostscriptParameter -as 
[Replay.Common.Contracts.PowerShellExecution.TransferPostscriptParameter];
# Working with input object. All echo's are logged
if($TransferPostscriptParameterObject -eq $null) {
	echo 'TransferPostscriptParameterObject parameter is null'
}
else {
	echo 'VolumeNames:' $TransferPostscriptParameterObject.VolumeNames
	echo 'ShadowCopyType:' $TransferPostscriptParameterObject.ShadowCopyType
	echo 'ForceBaseImage:' $TransferPostscriptParameterObject.ForceBaseImage
	echo 'IsLogTruncation:' $TransferPostscriptParameterObject.IsLogTruncation
}The PreExportScript is run on the Core before any export job.
# receiving parameter from export job
param([object]$ExportJobRequest)
# building path to Core's Common.Contracts.dll and loading this assembly
$regLM = [Microsoft.Win32.Registry]::LocalMachine
$regLM = $regLM.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AppRecovery Core 5')
$regVal = $regLM.GetValue('InstallLocation')
$regVal = $regVal + 'CoreService\Common.Contracts.dll'
[System.Reflection.Assembly]::LoadFrom($regVal)  |  out-null
# Converting input parameter into specific object
$ExportJobRequestObject = $ExportJobRequest -as [Replay.Core.Contracts.Export.ExportJobRequest]
# Working with input object. All echo's are logged
if($ExportJobRequestObject -eq $null) {
		echo 'ExportJobRequestObject parameter is null'
}
else {
		echo 'Location:' $ExportJobRequestObject.Location
		echo 'Priority:' $ExportJobRequestObject.Priority
}The PostExportScript is run on the Core after any export job.
| 
 
  | 
 NOTE: There are no input parameters for the PostExportScript when used to run once on the exported protected machine after initial startup. The regular protected machine should contain this script in the PowerShell script folder as PostExportScript.ps1.  | 
# receiving parameter from export job
param([object]$ExportJobRequest)
# building path to Core's Common.Contracts.dll and loading this assembly
$regLM = [Microsoft.Win32.Registry]::LocalMachine
$regLM = $regLM.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AppRecovery Core 5')
$regVal = $regLM.GetValue('InstallLocation')
$regVal = $regVal + 'CoreService\Common.Contracts.dll'
[System.Reflection.Assembly]::LoadFrom($regVal)  |  out-null
$regVal2 = $regLM.GetValue('InstallLocation')
$regVal2 = $regVal2 + 'CoreService\Common.Contracts.dll'
# Converting input parameter into specific object
$ExportJobRequestObject = $ExportJobRequest -as [Replay.Core.Contracts.Export.ExportJobRequest]
# Working with input object. All echo's are logged
if($ExportJobRequestObject -eq $null) {
		echo 'ExportJobRequestObject parameter is null'
}
else {
		echo 'VolumeImageIds:' $ExportJobRequestObject.VolumeImageIds
		echo 'RamInMegabytes:' $ExportJobRequestObject.RamInMegabytes
}The PreNightlyJobScript is run before every nightly job on Core side. It contains the parameter $JobClassName, which helps to handle those child jobs separately.
# receiving parameters from Nightlyjob
param([System.String]$JobClassMethod , [object]$NightlyAttachabilityJobRequest, [object]$RollupJobRequest, 
[object]$Agents, [object]$ChecksumCheckJobRequest, [object]$TransferJobRequest, [int]$LatestEpochSeenByCore)
# building path to Core's Common.Contracts.dll and loading this assembly
$regLM = [Microsoft.Win32.Registry]::LocalMachine
$regLM = $regLM.OpenSubKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AppRecovery Core 5')
$regVal = $regLM.GetValue('InstallLocation')
$regVal = $regVal + 'CoreService\Common.Contracts.dll'
[System.Reflection.Assembly]::LoadFrom($regVal)  |  out-null
<# Nightlyjob has four child jobs: NightlyAttachability Job, Rollup Job, 
Checksum Check Job and Log Truncation Job. All of them are triggering the 
script, and $JobClassMethod (contains job name that calls the script) helps 
to handle those child jobs separately #>
switch ($JobClassMethod) {
# working with NightlyAttachability Job
  NightlyAttachabilityJob {
    $NightlyAttachabilityJobRequestObject = $NightlyAttachabilityJobRequest -as 
    [Replay.Core.Contracts.Sql.NightlyAttachabilityJobRequest];
      echo 'Nightly Attachability job results:';
         if($NightlyAttachabilityJobRequestObject -eq $null) {
           echo 'NightlyAttachabilityJobRequestObject parameter is null';
           }
         else {
            echo 'AgentIds:' $NightlyAttachabilityJobRequestObject.AgentIds;
            echo 'IsNightlyJob:' $NightlyAttachabilityJobRequestObject.IsNightlyJob;
            }
            break;
		}
# working with Rollup Job
  RollupJob {
    $RollupJobRequestObject = $RollupJobRequest -as 
    [Replay.Core.Contracts.Rollup.RollupJobRequest];
      echo 'Rollup job results:';
         if($RollupJobRequestObject -eq $null) {
            echo 'RollupJobRequestObject parameter is null';
            }
         else {
            echo 'SimultaneousJobsCount:' $RollupJobRequestObject.SimultaneousJobsCount;
            echo 'AgentIds:' $RollupJobRequestObject.AgentIds;
            echo 'IsNightlyJob:' $RollupJobRequestObject.IsNightlyJob;
            }
	$AgentsCollection = $Agents -as "System.Collections.Generic.List``1[System.Guid]"
         if($AgentsCollection -eq $null) {
            echo 'AgentsCollection parameter is null';
            }
         else {
            echo 'Agents GUIDs:'
               foreach ($a in $AgentsCollection) {
                  echo $a
            }
         }
         break;
	}
# working with Checksum Check Job
  ChecksumCheckJob {
    $ChecksumCheckJobRequestObject = $ChecksumCheckJobRequest -as 
    [Replay.Core.Contracts.Exchange.ChecksumChecks.ChecksumCheckJobRequest];
      echo 'Exchange checksumcheck job results:';
         if($ChecksumCheckJobRequestObject -eq $null) {
           echo 'ChecksumCheckJobRequestObject parameter is null';
	        }
	     else {
	        echo 'RecoveryPointId:' $ChecksumCheckJobRequestObject.RecoveryPointId;
	        echo 'AgentIds:' $ChecksumCheckJobRequestObject.AgentIds;
	        echo 'IsNightlyJob:' $ChecksumCheckJobRequestObject.IsNightlyJob;
	        }
	        break;
	  }
# working with Log Truncation Job
  TransferJob {
    $TransferJobRequestObject = $TransferJobRequest -as
    [Replay.Core.Contracts.Transfer.TransferJobRequest];
      echo 'Transfer job results:';
         if($TransferJobRequestObject -eq $null) {
            echo 'TransferJobRequestObject parameter is null';
            }
      else {
            echo 'TransferConfiguration:' $TransferJobRequestObject.TransferConfiguration;
            echo 'StorageConfiguration:' $TransferJobRequestObject.StorageConfiguration;
            }
            echo 'LatestEpochSeenByCore:' $LatestEpochSeenByCore;
            break;
		}
}