SchTasks 在 Windows 2008 R2 上給出錯誤 (0x1)
我有一個 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 文件導入任務。