2007年3月9日 星期五

遠端關閉學生的應用程式-使用 taskkill

伙伴 huihui 發表了一個關閉學生應用程式的電腦教室管理工具。初看到這一段:

……其實用 WMI 加上 Script 就可以達成任務……

天真的我以為是在 AP 裡執行現成的 Windows 命令來達成將學生電腦的 IE 關掉的目的 ( 經過求證,我太天真了 ) ,於是便搜尋看看到底是用那個 Windows 命令完成的,結果找到了一個與 linux 上的 kill 命令相似的 Windows 內建命令: taskkill 。使用 taskkill 命令加上其他命令的配合,便可以達成「一口氣關閉整間電腦教室的 IE 瀏覽器」的目的。

這次要用的命令,除了 taskkill 之外,還有 for 與 start 搭配使用。

taskkill 的用法,可以查詢 Windows 的說明與支援,或是直接使用 taskkill /? 來顯示,這裡就不多說明,直接解釋我的用法:

taskkill /s pc403-01 /im iexplore.exe /u administrator /p admpasswd

  • /s pc403-01 :遠端電腦名稱為 pc403-01 。
  • /im iexplore.exe :要關閉的應用程式為 iexplore.exe ,即 IE 瀏覽器 ( im 為 image name 的縮寫 ) 。
  • /u administrator :遠端電腦執行 taskkill 的帳號,用管理員就對了。
  • /p admpasswd :遠端電腦的管理員密碼。如果只寫 /p 而省略密碼,則會提示輸入。

還有個 /f 是強迫關閉程式,但遠端執行一律是強迫關閉程式,可以省略。另外,在 AD 網域裡,執行這個程式的身份若為網域的管理員,則可以省略 /u 和 /p 。至此,已經可以關閉某一部學生電腦上正在執行的 IE 瀏覽器了。要關閉其他應用程式,只要修改 /im 參數就行了。

接下來,要批次關閉整間電腦教室就要動用到批次命令了。簡單一點的方法,就是用批次檔替每個學生電腦寫一行 taskkill 命令。不過,我個人偏好使用 for 命令。在 Windows 遠端關機的文章裡已經介紹過 for 命令了,這裡直接看完整指令吧:

for /l %a in (1,1,9) do taskkill /s pc403-0%a /im iexplore.exe for /l %a in (10,1,46) do taskkill /s pc403-%a /im iexplore.exe

這裡的 for /l 參數的用法,類似於一般程式語言裡的 for 迴圈,就不廢話了。寫成兩行的原因是我找不到自動生成 01 - 09 的方法,若有高人可指點的話,不勝感激。當然,如果電腦名稱不像我們的電腦教室這般有數字規則的話,可以使用在 Windows 遠端關機文章裡提到的 for /f 參數代替。

那還有 start 命令呢?因為並不是每個學生都在上網,於是便會遇到 taskkill 尋找遠端電腦裡不存在的執行中應用程式而造成延遲。因為上個命令尚未執行完畢的話,批次檔裡的下個命令無法繼續執行,整個批次命令的執行時間便會拉長,於是便想看看能不能讓每個 taskkill 在背景執行。經過一番研究,找到了 start 加上 /b 參數。

同樣地, start 的用法請自行參閱 Windows 的說明與支援或 start /? 的說明,下面是修改過的用法:

for /l %a in (1,1,9) do start /b taskkill /s pc403-0%a /im iexplore.exe for /l %a in (10,1,46) do start /b taskkill /s pc403-%a /im iexplore.exe

如此便可以飛快的執行完畢,大功告成啦!與 huihui 的管理工具只差一項延遲功能了。

延遲功能部份,我原想找看看 Windows 是否有內建像 Linux shell 裡的 sleep 命令,可惜找不到 。後來想試試用 schtasks create 命令建立一次性的排程,但是它又只支援使用時間格式,彈性不夠。目前的想法是自己寫個 sleep 功能的命令列小程式來補足。不過,我還是想儘量能用內建的命令來完成。有人能提供點意見嗎?!

謝謝收看!

參考閱讀:

沒有留言:

張貼留言