Windows-Server-2008-R2

SchTasks 在 Windows 2008 R2 上給出錯誤 (0x1)

  • May 7, 2019

我有一個 powershell 腳本,它創建計劃任務作為自動化過程的一部分,我的語法如下;

schtasks /create /s ServerName /u $username /p $password /ru $username /rp $password /sc once /sd $StartDate /st $StartTime /tn $taskname /tr "\\ServerName\c$\$TaskName\$Taskname.bat"

任務成功創建,但是當執行時間到來時,它總是失敗並出現錯誤(0X1)。

如果我單獨執行批處理文件,它會完美執行;所以我的計劃任務創建錯誤。

然後我發現它在我提供“start-in”目錄路徑時有效。

我的問題是為什麼我應該在任務屬性中明確顯示“可選”時提供路徑開始?

我的另一個問題是如何提供路徑起點?嘗試了很多方法,一切都失敗了,有沒有自動化的方法可以做到這一點?我應該手動更新每個任務嗎?

我的問題是為什麼我應該在任務屬性中明確顯示“可選”時提供路徑開始?

例如,假設我正在創建一個將執行 Powershell 腳本的計劃任務:

在此處輸入圖像描述

為什麼這是錯誤的?首先,我們不確定 powershell.exe 是否會正確解析,因為我們不知道執行計劃任務的使用者是否正確設置了他或她的 PATH 環境變數。根據您將任務設置為誰執行,無論是系統使用者還是域使用者,它們的 PATH 變數都會有所不同。有時它可以工作,並且 powershell.exe 已正確啟動,但為什麼不繼續進行猜測並指定 powershell.exe 執行檔的完全限定路徑名。

其次,script.ps1在哪裡?你沒有具體說明。Powershell 即將啟動,其啟動目錄將是%WINDIR%\System32. 除非那是您儲存腳本的地方(我希望不是),否則 Powershell 將無法找到它。

在此處輸入圖像描述

現在更好了,因為我們已經為執行檔和腳本提供了完全限定的路徑名。但是我們還沒有搞清楚“Start in (optional)”是乾什麼用的。等等,我們快到了。

的內容script.ps1是這樣的:

"Hello world!" | Out-File test.txt

所以如果我現在執行上面的計劃任務,它啟動 Powershell,它執行 script.ps1,你認為 test.txt 會寫在哪裡?

如果你猜到%WINDIR%\System32了,那麼你會得到一個餅乾!

如果我想C:\Scripts改為使用 test.txt,那麼我會C:\Scripts在“開始於(可選)”欄位中輸入!

這就是為什麼它是可選的。

我還應該指出,您還可以通過在腳本中使用完全限定的路徑名來解決此問題,以便將內容轉到您希望它們去的地方,而不必擔心 PATH 變數和工作目錄。


現在進入第二個問題。

schtasks.exe 似乎無法添加計劃任務的“開始於”或“工作目錄”。真可惜。

您可以做的一件事是將 XML 用於 Task Scheduler 2.0 任務,它可以讓您設置工作目錄。這是我為此問題創建的測試任務的 XML:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
 <RegistrationInfo>
   <Date>2013-07-19T09:41:27.0446696</Date>
   <Author>DOMAIN\user</Author>
 </RegistrationInfo>
 <Triggers />
 <Principals>
   <Principal id="Author">
     <UserId>DOMAIN\user</UserId>
     <LogonType>InteractiveToken</LogonType>
     <RunLevel>LeastPrivilege</RunLevel>
   </Principal>
 </Principals>
 <Settings>
   <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
   <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
   <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
   <AllowHardTerminate>true</AllowHardTerminate>
   <StartWhenAvailable>false</StartWhenAvailable>
   <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
   <IdleSettings>
     <StopOnIdleEnd>true</StopOnIdleEnd>
     <RestartOnIdle>false</RestartOnIdle>
   </IdleSettings>
   <AllowStartOnDemand>true</AllowStartOnDemand>
   <Enabled>true</Enabled>
   <Hidden>false</Hidden>
   <RunOnlyIfIdle>false</RunOnlyIfIdle>
   <WakeToRun>false</WakeToRun>
   <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
   <Priority>7</Priority>
 </Settings>
 <Actions Context="Author">
   <Exec>
     <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
     <Arguments>C:\Scripts\script.ps1</Arguments>
     <WorkingDirectory>C:\Scripts</WorkingDirectory>
   </Exec>
 </Actions>
</Task>

您可以使用schtasks /XML以腳本方式從 XML 文件導入任務。

引用自:https://serverfault.com/questions/524384