Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

You can use the JobScheduler PowerShell Adapter to create jobs or pre-processors and post-processors that use the JobScheduler API in PowerShell.

Requirements

  • Windows Machine with a JobScheduler installation
  • .Net Framework 4
  • PowerShell 2 or newer

Installation

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 the com_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

Code Block
languagexml
    <?xml versioh1. "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

Code Block
languagejs
collapsetrue
    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-/post-processor

Only one Powershell pre-/post-processor can be configured per job.

  • Have the <monitor><script/></monitor> use the com_class JSPowershellAdapter.JobAdapter
  • define a parameter powershell_monitor_script which points to the location of the PowerShell pre-/post-processor implementation
    • If the path is relative, it needs to be relative to the SCHEDULER_DATA directory
  • write a PowerShell pre-/post-processor implementation

Example job definition

Code Block
languagexml
    <?xml version"1.0" encodinh1. "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-/post-processor script

Code Block
languagejs
    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")
    }