2012-05-11 70 views
3

我有一個Perl腳本使用反引號在Windows上調用程序。當我在命令提示符下運行它時,它工作正常。當我使用Windows任務調度器運行它時,它停止工作。這是在Windows Server 2008 x64上使用ActiveState Perl。它給我一個錯誤不被識別爲內部或外部命令,可操作程序或批處理文件。一旦我改變了對程序的調用以指向程序的完整路徑,它就會再次運行。通過Windows任務計劃程序運行的Perl腳本產生的進程無權訪問%PATH%

因此,當它在帶反引號的任務計劃中運行時,會阻止它看到Windows環境變量,特別是運行時的%PATH%變量。反引號產生的shell可能缺少某些東西?我應該使用不同的命令來執行系統調用嗎?或者是否有任務計劃程序設置可以解決此問題?如果任何人都可以協助,我將不勝感激。

說實話,我的環境比這更復雜,但這是我縮小到的範圍。我實際上有一個批處理文件的任務計劃,該文件運行一個php腳本,該腳本本身運行perl腳本,然後運行該程序。我之前沒有提到的其他堆棧似乎可以訪問%PATH%,所以批處理文件運行'php ...',php腳本運行'perl ...',然後perl腳本失敗當使用反引號運行'程序名'時。我剝離了批處理文件和php腳本,行爲仍然只存在於任務計劃程序和perl中。

+1

獲取你的Perl腳本來運行'路徑> C:\在同樣的情況下logfile.txt',這樣就可以看到什麼路徑設置爲。 –

+0

三通。[Unix的人總是有這樣的問題](http://stackoverflow.com/questions/6141708/shell-script-runs-from-command-line-not-cron) – mob

+0

@mob Unix或不,我希望人們誰擁有一個計劃任務開始的地方*一個運行php腳本的批處理文件,它本身運行Perl腳本*?說真的,嗨?這裏有很多動人的東西都有waaaayyy。 –

回答

2

perl中的運行路徑基本上幫助我解決了這個問題。問題不是perl本身,而是在任務調度程序服務重新啓動之前,對%PATH%變量所做的更改不顯示給任務調度程序。據我所知,如果不重新啓動機器,無法重新啓動任務計劃程序。因此,程序路徑在任務計劃中運行時未顯示,但顯示在命令行中。

我找到了兩個解決方案。

一種是重新啓動機器。

第二種方法是確保您的任務計劃設置爲'運行用戶是否已登錄'(最接近此選項的命令行參數是schtasks的/ NP參數)出於某種原因運行計劃在這種情況下可以訪問當前的%PATH%變量。我不確定,但我認爲這會破壞需要與桌面交互的腳本。

0

如果您具有管理訪問權限,則可以定義系統範圍%PATH%。用戶的%PATH%對其進行了擴充。在用戶帳戶下的系統上運行的常規程序應該能夠看到系統範圍%PATH%

我不知道您是從GUI安排任務還是使用AT,但Scheduled Jobs Cannot Access User Environment Variables可能會有所幫助。

+0

我認爲在這種情況下%PATH%是系統範圍%PATH%。無論如何,由於時間表是作爲管理員帳戶運行的,因此無關緊要。該任務使用schtasks進行計劃。 – TinyGrasshopper

0

我剛剛遇到了這個相同或至少類似的問題。我會告訴你我調查的細節。解決方案是UAT正在阻礙。

我在我的Windows 7機器上擁有本地管理員權限。我必須進入管理工具>本地安全策略>安全選項和ENABLE用戶帳戶控制:以管理員批准模式運行所有管理員。重新啓動 - 瞧。我的腳本現在在Task Scheduler中運行。

希望這有助於

+0

該選項默認啓用。你以前是否禁用過它? –

相關問題