PowerShell job fails with the following error message:
Exception found: System.Management.Automation.RuntimeException
Exception text: You cannot call a method on a null-valued expression.
__uc_return : The term '__uc_return' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that
the path is correct and try again.
At C:\Automic\Automation.Platform\Agents\windows\temp\JAADYVCM.TXT.ps1:74 char:3
+ __uc_return( 9999 )
+ ~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (__uc_return:String) [], ParentContainsErrorRecordE
xception
+ FullyQualifiedErrorId : CommandNotFoundException
Release : 12.3
Component : AUTOMATION ENGINE
OS: Windows Server 2012, 2016, 2019
PowerShell version: 5.1.14393.4350
Configuration.
The HEADER.WINDOWS in client 0 was utilizing the include HEADER.WINDOWS.USER.HEAD which was not configured for PowerShell 5.
Non working HEADER.WINDOWS.USER.HEAD:
:if &uc_win_typ = "EXTCOMPROC"
:set &UC_JOBMD = get_var(UC_EX_JOB_MD)
:set &UC_IP_PORT = get_var(UC_EX_IP_PORT)
:set &UC_IP_ADR = get_var(UC_EX_IP_ADDR)
:set &UC_REALNR = SYS_ACT_RESTART_ME_NR
:set &UC_MANDANT = SYS_ACT_CLIENT
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$objectRef = $host.GetType().GetField("externalHostRef", $bindingFlags).GetValue($host)
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetProperty"
$consoleHost = $objectRef.GetType().GetProperty("Value", $bindingFlags).GetValue($objectRef, @())
[void] $consoleHost.GetType().GetProperty("IsStandardOutputRedirected", $bindingFlags).GetValue($consoleHost, @())
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$field = $consoleHost.GetType().GetField("standardOutputWriter", $bindingFlags)
$field.SetValue($consoleHost, [Console]::Out)
$field2 = $consoleHost.GetType().GetField("standardErrorWriter", $bindingFlags)
$field2.SetValue($consoleHost, [Console]::Out)
!Common function for returning from UC4 script
!Function calls the Messanger and generate the UC4 return code
function __uc_return( $retcode )
{
__call_messanger "E" $retcode
if( $LastExitCode -ne 0 )
{
Write "ATTENTION - UC4:JOBMESSENGER failed"
Write "JOB ended with RETCODE $retcode"
Write "JOBMSG ended with RETCODE $retcode"
Write "JOB will abort with RETCODE from JOBMSG step"
}
exit $retcode
}
!Function calls the messanger executable and generate the output
function __call_messanger( $typ, $retcode )
{
:SET &UC_PS_JOBMD_QUOTE_CHK = STR_FIND(&UC_JOBMD,'"')
:IF &UC_PS_JOBMD_QUOTE_CHK <> 0
$exe = &UC_JOBMD
:ELSE
$exe = "&UC_JOBMD"
:ENDIF
$jobid = "JNR=&UC_REALNR"
$client = "MNR=&UC_MANDANT"
$port = "PNR=&UC_IP_PORT"
$ip = "IPA=&UC_IP_ADR"
$type = "TYP=$typ"
$rc = "RET=$retcode"
if( $typ -eq "E" )
{
$txt = "TXT= Job ended with retcode"
& $exe $jobid $client $port $ip $type $txt $rc
}
else
{
$txt = "TXT= Job started"
& $exe $jobid $client $port $ip $type $rc $txt
}
if( $LastExitCode -ne 0 )
{
__uc_return( $LastExitCode )
}
}
__call_messanger "S" "0"
!Generic PowerShell exception handling,
!catch all unhandle exceptions and ends UC4 script with return code 9999
trap [Exception]
{
Write ""
Write $("Exception found: " + $_.Exception.GetType().FullName);
Write $("Exception text: " + $_.Exception.Message);
Write ""
__uc_return( 9999 )
}
:endif
Correct HEADER.WINDOWS.USER.HEAD:
:if &uc_win_typ = "EXTCOMPROC"
:set &UC_JOBMD = get_var(UC_EX_JOB_MD)
:set &UC_IP_PORT = get_var(UC_EX_IP_PORT)
:set &UC_IP_ADR = get_var(UC_EX_IP_ADDR)
if ($PSVersionTable.PSVersion.Major -le 2)
{
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$objectRef = $host.GetType().GetField("externalHostRef", $bindingFlags).GetValue($host)
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetProperty"
$consoleHost = $objectRef.GetType().GetProperty("Value", $bindingFlags).GetValue($objectRef, @())
[void] $consoleHost.GetType().GetProperty("IsStandardOutputRedirected", $bindingFlags).GetValue($consoleHost, @())
$bindingFlags = [Reflection.BindingFlags] "Instance,NonPublic,GetField"
$field = $consoleHost.GetType().GetField("standardOutputWriter", $bindingFlags)
$field.SetValue($consoleHost, [Console]::Out)
$field2 = $consoleHost.GetType().GetField("standardErrorWriter", $bindingFlags)
$field2.SetValue($consoleHost, [Console]::Out)
}
!Function calls the messanger executable and generate the output
function __call_messanger( $typ, $retcode )
{
:SET &UC_PS_JOBMD_QUOTE_CHK = STR_FIND(&UC_JOBMD,'"')
:IF &UC_PS_JOBMD_QUOTE_CHK <> 0
$exe = &UC_JOBMD
:ELSE
$exe = "&UC_JOBMD"
:ENDIF
$jobid = "JNR=&UC_REALNR"
$client = "MNR=&UC_MANDANT"
$port = "PNR=&UC_IP_PORT"
$ip = "IPA=&UC_IP_ADR"
$type = "TYP=$typ"
$rc = "RET=$retcode"
if( $typ -eq "E" )
{
$txt = "TXT= Job ended with retcode"
& $exe $jobid $client $port $ip $type $txt $rc
}
else
{
$txt = "TXT= Job started"
& $exe $jobid $client $port $ip $type $rc $txt
}
if( $LastExitCode -ne 0 )
{
__uc_return( $LastExitCode )
}
}
!Common function for returning from UC4 script
!Function calls the Messanger and generate the UC4 return code
function __uc_return( $retcode )
{
__call_messanger "E" $retcode
if( $LastExitCode -ne 0 )
{
Write "ATTENTION - UC4:JOBMESSENGER failed"
Write "JOB ended with RETCODE $retcode"
Write "JOBMSG ended with RETCODE $retcode"
Write "JOB will abort with RETCODE from JOBMSG step"
}
exit $retcode
}
__call_messanger "S" "0"
!Generic PowerShell exception handling,
!catch all unhandle exceptions and ends UC4 script with return code 9999
trap [Exception]
{
Write ""
Write $("Exception found: " + $_.Exception.GetType().FullName);
Write $("Exception text: " + $_.Exception.Message);
Write ""
__uc_return( 9999 )
}
:endif