[英]SAS program in Task Scheduler does not execute a subprocess using %sysexec
我的任務計划程序調用 Powershell 腳本,該腳本啟動 SAS 程序,該程序又使用 %sysexec 執行 Windows 命令(並在旁邊做了很多其他的事情)
當我以交互方式運行 Powershell 腳本或在任務計划程序中手動啟動它時,%sysexec 命令在 SAS 程序中正確執行。
如果任務計划程序沒有以交互方式啟動 Powershell 腳本並且我沒有在計算機上登錄,則不會執行 %sysexec 命令。 然而,它返回 sysrc=0 作為結果(成功)。
在帶有 Windows Server 2012 的舊機器上它可以工作,在帶有 Windows 2019 的新機器上它沒有。
我在這里寫了一個高度簡化的例子。
任務計划程序操作:
powershell -executionpolicy bypass "C:\temp\test_sas.ps1"
Powershell 腳本 test_sas.ps1:
$sasrootdirStr = "D:\sas\SASHome\SASFoundation\9.4"
$pgmdirStr = "C:\temp"
$pgmnameStr= "test_sas"
$logdirStr = "C:\temp"
$logfileStr = $logdirStr + "\" + $pgmnameStr + ".log"
& "$sasrootdirStr\sas.exe" "$pgmdirStr\$pgmnameStr.sas" -log "$logfileStr"
SAS程序test_sas.sas:
%macro test_sas;
%local macroname;
%let macroname= test_sas;
%let newdir = %str(C:\temp\martin);
%let sysrc = -1;
%sysexec "mkdir" &newdir..;
%if &sysrc ne 0 %then %do;
%put ERROR: ¯oname: Could not execute command mkdir (sysrc: &sysrc.).;
%end;
%put sysrc: &sysrc;
%mend test_sas;
%test_sas;
日志文件 test_sas.log 中的結果(未執行 %sysexec 命令 mkdir):
sysrc: 0
NOTE: SAS Institute Inc, SAS Campus Drive, Cary, NC USA 27513-2414
NOTE: The SAS System used:
real time 0.60 seconds
cpu time 0.68 seconds
使用的軟件版本:
新的(有錯誤):
舊的(沒有錯誤):
怎么了?
data _null_; infile "mkdir ""&newdir""" pipe; input; put _infile_; run;
作品。 但是數據步的結果代碼始終為零(syserr=0,成功),即使 windows 命令無法成功執行。
如何從 pipe 中執行的命令中獲取有用的返回值? 我真的需要這個。
powershell 腳本的以下代碼有效。 我可以使用 start-process 命令,而不是使用調用運算符 (&)。 子 SAS 程序中的 %sysexec 命令將在所有情況下正確執行,即使觸發了任務調度程序操作。
Powershell腳本test_sas.ps1:
$process = (Start-Process -FilePath "$sasrootdirStr\sas.exe" -ArgumentList "`"$pgmdirStr\$pgmnameStr.sas`" -log `"$logfileStr`"" -PassThru -Wait)
Write-Host "Process terminated with return code: " $process.ExitCode
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.