簡體   English   中英

任務計划程序中的 SAS 程序不使用 %sysexec 執行子進程

[英]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: &macroname: 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

使用的軟件版本:

新的(有錯誤):

  • SAS 9.04.01M7P080520
  • Windows服務器2019標准版1809
  • Powershell 5.1.17763.2931

舊的(沒有錯誤):

  • SAS 9.04.01M4P110916
  • Windows 服務器 2012 R2 標准
  • Powershell 4.0

怎么了?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM