Page History
...
- PowerShell is a frequently used scripting language available for Linux, MacOS, Windows and other platforms.
- JS7 offers the JS7 - PowerShell Module for simplified access to the JS7 - REST Web Service API
- This article explains how to syntactically include PowerShell scripts with JS7 job scripts
Unix
- Find the below examples for download: run-powershell-unix.workflow.json
In order to directly add PowerShell script code to a JS7 shell job script the recommended approach is to use a shebang like this:
Code Block language bash title Example how use PowerShell script code with a shebang #!/usr/bin/env pwsh Write-Output "Hello" Write-Output "world"
As an a bad alternative the PowerShell executable can be invoked directly and can be parameterized like this
Code Block language bash title Example how to pass a variable to subsequent jobs with Windowsadd PowerShell script code from a single line pwsh -NoLogo -NonInteractive -Command '& { Echo "Hello"; Echo "World"; }'
Explanation:- Consider the quoting: when using the
-Command
parameter then the PowerShell script has to be specified from a string. This includes to- quote the script by single quotes.
- quote code inside the script with double quotes or to use escape characters for single quotes.
- Consider that each PowerShell command has to be terminated with a semicolon.
- Consider the quoting: when using the
An even more weird way how to add PowerShell code to
aJS7 job
scriptscripts includes:
Code Block language bash title Example how to pass a variable to subsequent jobs with Windowsadd PowerShell script code from a multiple lines pwsh -NoLogo -NonInteractive -Command '& { ` Echo "Hello"; ` Echo "World"; ` }'
Explanation:- Consider use of single quotes and , double quotes and semicolons as from the previous example.
- In addition each line of script code has to be terminated with a backtick for line continuation.
...
Windows
- To address the problem of special characters use base64 encoding for variable values as this encoding results in a single printable string.
- To address the limitation concerning the size of environment variables do not use them and think about ways how to directly append lines to the temporary file indicated by
JS7_RETURN_VALUES
.
Example
- Find the below examples for download: run-powershell-windows.workflow.json
In order to directly add PowerShell script code to a JS7 shell job script the recommended approach is to use a shebang replacement like this
Let's assume two jobs to be executed in sequence:- The first job creates a lengthy e-email body in HTML format, The second job sends e-mail and makes use of the HTML body. Find a number of possible implementations for the JS7 job script
- Credits for the shebang replacement to How to run a PowerShell script within a Windows batch file
:
title | Example for PowerShell version on Windows (multi-line) |
---|
Code Block | ||||
---|---|---|---|---|
|
#!/user/bin/env bash
mailBody="<html><body><b>hello</b> <i>world</i></body></html>"
mailBodyEncoded=$(echo $mailBody | base64)
echo "body=base64:$mailBodyEncoded" >> $JS7_RETURN_VALUES
Code Block | ||||
---|---|---|---|---|
| ||||
#!/user/bin/env bash
echo "<html><body><b>hello</b> <i>world</i></body></html>" > /tmp/mail-body.html
echo "body=base64:$(cat /tmp/mail-body.html | base64)" >> $JS7_RETURN_VALUES |
Code Block | ||||
---|---|---|---|---|
| ||||
#!/usr/bin/env pwsh
$mailBody = "<html><body><b>hello</b> <i>world</i></body></html>"
$mailBodyEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes( $mailBody ))
"body=base64:$mailBodyEncoded" | Out-File $env:JS7_RETURN_VALUES -Append |
|
@@findstr/v "^@@f.*&" "%~f0"|pwsh.exe -&goto:eof Write-Output "Hello" Write-Output "world" |
Explanation:
As a bad alternative the PowerShell executable can be invoked directly and can be parameterized like this
$mailBody = "<html><body><b>hello</b> <i>world</i></body></html>" $mailBodyEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes( $mailBody )) "body=base64:$mailBodyEncoded" | Out-File $env:JS7_RETURN_VALUES -AppendCode Block language bash title Example how to add PowerShell script code from a single line Code Block title Example for PowerShell version on Windows (single-line)
body=base64:$([System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes( '<html><body><b>hello</b> <i>world</i></body></html>' )) )"" | Out-File $env:JS7_RETURN_VALUES -Appendpwsh.exe -NoLogo -NonInteractive -Command "& { Echo ""
Flight Destination: $env:FLIGHT_DESTINATION""; Echo ""Booking Code: $env:BOOKING_CODE""; }"
Explanation:- Consider the quoting: when using the
-Command
parameter then the PowerShell script has to be specified from a string. This includes to- quote the script by double quotes.
- quote code inside the script with two double quotes or to use single quotes.
- Consider that each PowerShell command has to be terminated with a semicolon
In fact the e-mail body is not too lengthy, however, it suggests that an e-mail body of arbitrary size would be imported by some template file as e.g. for PowerShell with
$mailBody = Get-Content "mail-body.html"
- The above bash version with files and the PowerShell version both work with arbitrary length values.
- Base64 encoding is available from a number of sources such as the
base64
Unix utility or the .NET Core class. - The value of the
body
variable is prefixed withbase64:
to indicate the encoding. The subsequent JS7 - JITL MailJob accepts the
body
variable, identifies the encoding and automatically decodes the argument value.- Consider the quoting: when using the