Using the Job Scheduler Powershell Adapter, it's possible to create jobs or pre-/postprocessors that use the JobScheduler API in Powershell.
Requirements
- Windows Machine with a JobScheduler installation
- .Net Framework 4
- Powershell 2
Installation
- Download the JobScheduler Powershell Adapter from http://www.sos-berlin.com/download/scheduler/JobSchedulerPowershellAdapter.zip
- Unzip the files to the bin directory of your JobScheduler installation
- Register the assembly by running
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe [install_path]\bin\JobSchedulerPowershellAdapter.dll /codebase
Usage
The Powershell Adapter uses the JobScheduler COM interface.
Currently, neither COM Jobs nor Powershell Jobs are supported by JOE. So, Powershell Jobs need to be configured by manually editing XML files.
configuring a powershell job
- Have the
<script>
use thecom_class JSPowershellAdapter.JobAdapter
- define a parameter
powershell_script
which points to the location of the Powershell job implementation- If the path is relative, it needs to be relative to the SCHEDULER_DATA directory
- write a powershell Job implementation which at least implements
Function spooler_process()
Example job definition
<?xml version="1.0" encoding="ISO-8859-1"?> <job> <params> <param name="test" value="12345"/> <param name="powershell_script" value="powershell\powershell_job.ps1"/> </params> <script com_class="JSPowershellAdapter.JobAdapter"/> <run_time once="no"/> </job>
Example Powershell Job script
Function spooler_init() \{ if ($spooler_log) \{ $spooler_log.info("This is spooler_init") $spooler_log.info("TaskID: "+$spooler_task.id) \} return $true \} Function spooler_open() \{ $spooler_log.info("This is spooler_open") return $true; \} Function spooler_process() \{ $taskId = $spooler_task.id $spooler_log.info("This is spooler_process, in task id "+$taskId) $order = $spooler_task.order if ($order) \{ $orderId = $order.id $spooler_log.info("processing order "+$orderId) return $true \} return $false; \} Function spooler_close() \{ $spooler_log.info("This is spooler_close") \} Function spooler_exit() \{ $spooler_log.info("This is spooler_exit") \} Function spooler_on_success() \{ $spooler_log.info("This is spooler_on_success") \} Function spooler_on_error() \{ $spooler_log.info("This is spooler_on_error") \}
Configuring a powershell pre-/postprocessor
Only one powershell pre-/postprocessor can be configured per job.
- Have the
<monitor><script/></monitor>
use thecom_class JSPowershellAdapter.JobAdapter
- define a parameter
powershell_monitor_script
which points to the location of the Powershell pre-/postprocessor implementation- If the path is relative, it needs to be relative to the SCHEDULER_DATA directory
- write a powershell pre-/postprocessor implementation
Example job definition
<?xml version="1.0" encoding="ISO-8859-1"?>
<job> <params> <param name="powershell_monitor_script" value="powershell\powershell_monitor.ps1"/> </params> <script language="javascript"> <![CDATA[ function spooler_process()\{ spooler_log.info("this is javascript");
return false; \} ]]> </script> <monitor> <script com_class="JSPowershellAdapter.JobAdapter"/> </monitor> </job>
Example Powershell pre-/postprocessor script
Function spooler_task_before() \{ $spooler_log.info("powershell: This is spooler_task_before") return $true \}
Function spooler_process_before() \{ $spooler_log.info("powershell: This is spooler_process_before") return $true \}
Function spooler_process_after([bool] $spooler_process_result) \{ $spooler_log.info("powershell: This is spooler_process_after with result $spooler_process_result") return $spooler_process_result \}
Function spooler_task_after() \{ $spooler_log.info("powershell: This is spooler_task_after") \}