Const OverwriteExisting = TRUE
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "C:\Scripts\Interactive.vbs", _
"\\atl-ws-01\C$\Scripts\", OverWriteExisting
strComputer = "atl-ws-01"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
errJobCreated = objNewJob.Create _
("wscript.exe c:\scripts\interactive.vbs", "********084500.000000-420", _
False, 2, , True, JobID)
前面已經說過,從遠端啟動的處理都是在不可見的視窗中執行,這是無法改變的事實。如果想要執行與使用者互動的處理,就必須在本機啟動該處理。我們的辦法就是從本機啟動該處理。在指令碼的第一部份中,我們將檔案 C:\Scripts\Interactive.vbs 複製至遠端電腦 atl-ws-01 上的 Scripts 資料夾中。(請注意,我們是使用管理共用 – C$ -- 來執行這項作業。如果 C:\Scripts 設定作為其他共用,也可以改用「標準」UNC 路徑,如 \\atl-ws-01\scripts)。下列指令碼可複製該檔案,覆寫 Scripts 資料夾中可能會有的其他 Interactive.vbs 檔案:
objFSO.CopyFile "C:\Scripts\Interactive.vbs", _
"\\atl-ws-01\C$\Scripts\", OverWriteExisting
如此即可將 Interactive.vbs 檔案複製至遠端電腦。但是問題來了,要如何執行該指令碼,更重要的是,要如何從本機執行該指令碼?
雖然有好幾種方法,但我們選擇建立排程工作,然後透過該工作,在遠端電腦上啟動指令碼。我們是先在「在遠端電腦上」繫結至 WMI 服務,然後使用「Get」方法,連接至 Win32_ScheduledJob 類別。下列程式碼就是執行這些動作:
strComputer = "atl-ws-01"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objNewJob = objWMIService.Get("Win32_ScheduledJob")
在我們的範例指令碼中,假定時間是星期二上午,而您要讓互動式共用處理在上午 8:45 執行;以下這行怪異的指令碼就是執行這項作業:
errJobCreated = objNewJob.Create _
("wscript.exe c:\scripts\interactive.vbs", "********084500.000000-420", _
False, 2, , True, JobID)
限於篇幅,我們無法在這期專欄中詳細說明 Win32_ScheduledJob「Create」方法的所有參數;如果您需要了解其中各項細節,請參閱《Microsoft Windows 2000 Scripting Guide》(英文) 中的相關部分。總而言之,我們設定的就是下列參數:
參數 |
說明 |
"wscript.exe c:\scripts\interactive.vbs" |
要執行之指令碼/可執行檔的路徑。既然這應該是互動式共用處理,我們明確地呼叫 wscript.exe 做為指令碼裝載,如此有助確保互動式項目 (例如,使用 Wscript.Echo 建立的訊息方塊) 確實會以互動式項目出現。 |
"********084500.000000-420" |
工作該執行的時間,使用的是 UTC (Universal Time Coordinate) 格式。我們今天就不說明 UTC 格式了,如需詳細資訊,請參閱《Scripting Guide》(英文)。現在您只需要管兩件事情:0845 (代表 24 小時時間格式的 8:45 AM) 和「-420」(代表您的時區與格林威治標準時間的時間差)。依您要指令碼執行的時間與電腦所在時區而定,您可能需要變更其中一個值或兩個值都變更。 |
False |
表示排程工作是否要重複執行。由於我們只要執行這項工作一次,因此將值設定為 False。 |
2 |
排程工作所需執行的天數。 |
|
指定一個月之中,工作應該執行的日子。由於這個參數只在排定多次執行工作時才會使用,因此就保留為空白。 |
True |
表示排程工作是互動式,且應該在可見視窗中執行。如果這個參數設為 False (這是預設值),指令碼就會在隱藏視窗中執行,糟糕! |
JobID |
存放指定給新工作之工作識別碼的 Out 參數。 |
執行指令碼,在上午 8:45 時,Interactive.vbs 應該會在遠端電腦 atl-ws-01 上啟動執行。更重要的是,由於 Interactive.vbs 是在本機啟動,它會在可見視窗中執行,因此完全可以進行互動:使用者可以存取指令碼中使用的任何訊息方塊、對話方塊,或其他互動式項目。
就像我們說過了的,這個變通辦法有點麻煩。可是至少很管用,其他都不重要。
哦,另外還讓「嗨,Scripting Guy!」顯得更有文化氣息和素養!也許我們下一期專欄就專門討論抑揚格五音步詩;豈不是更高尚,酷斃了!
你們有誰知道什麼叫「抑揚格五音步詩」嗎? |