嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎使用 TechNet 專欄,Microsoft Scripting Guy 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

今天的問題:如何清除 Windows 2000 Print Server 上所有的列印工作?


如何清除 Windows 2000 Print Server 上所有的列印工作?

嗨,Scripting Guy! 請問如何清除 Windows 2000 Print Server 上所有的列印工作?

-- KC

KC,您好。老實說,我們最怕回答這種問題了,倒不是因為答不出來 (我們當然答得出來),而是因為必須暫時放下 Scripting Guy 的中心教義之一。這個教義,等一下,我先清清喉嚨,就是:ADSI 是用來管理 Active Directory 和其他目錄服務 (包括本機電腦帳戶);而 WMI 則負責管理其他項目。

好吧,它或許比不上十誡或金科玉律,我們也只不過是小小的 Scripting Guy,不是哲學家。

雖然我們的原則很簡單,可也很少出錯。舉個例來說吧,假設您是使用 Windows XP 或 Windows Server 2003 作為列印伺服器,如果您想刪除所有在這部電腦上執行的列印工作,只要依照我們之前告訴您的方法,使用 WMI 指令碼就行了:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
    ("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
    objPrinter.CancelAllJobs()
Next

但要是您是使用 Windows 2000 的電腦作為列印伺服器呢? 這時候就有問題了: Windows 2000 並沒有 CancelAllJobs() 方法可從 Windows XP 和 Windows Server 2003 上的印表機刪除列印工作。不只如此,WMI 存放庫中甚至連旗鼓相當的方法都找不到。這就是殘酷的現實: 您不能使用 WMI 來刪除 Windows 2000 電腦上所有的列印工作。

這時候,只要是具有崇高品德的人一定就此打住,他們才不會為了刪除列印伺服器上區區幾個列印工作,而犧牲自己的原則。不過,Scripting Guy 就沒有這種包袱了;我們倒是可以提供一個 ADSI 指令碼,幫助您刪除 Windows 2000 電腦上所有的列印工作:

Set objComputer = GetObject("WinNT://atl-ps-01")
objComputer.Filter = Array("printQueue")
For Each objPrinter in objComputer
    objPrinter.Purge 
Next

如您所見,一開始我們是利用 WinNT 提供者連接到列印伺服器 atl-ps-01 (對了,WinNT 有大小寫之分;如果您用的是 winnt 或 WINNT 或其他大小寫組合,指令碼會無效),它會傳回 atl-ps-01 上所有「東西」的集合,或者至少是 ADSI 知道的所有東西,有使用者帳戶、群組、服務,連印表機也有。不過我們只關心印表機,所以就套用一個「篩選條件」,限它傳回 printQueue 物件;您可能也想到了,printQueue 就是 ADSI 對印表機物件的表示法。篩選條件只需一行程式碼:

objComputer.Filter = Array("printQueue")

順便提一下,我們篩選的物件 (printQueue),必須設定為陣列才行。這個程式碼看起來好像行得通,其實不然:

objComputer.Filter = "printQueue"

現在我們只能對印表機集合執行迴圈,然後針對每一個找到的印表機,刪除所有的列印工作,這個動作可以用 Purge 命令完成。要刪除所有印表機上所有的列印工作,只需要三行程式碼就行了:

For Each objPrinter In objComputer
    objPrinter.Purge 
Next

不賴吧?如果您想獲得更多有關在 Windows 2000 上管理列印伺服器的資訊,可以看看《Microsoft Windows 2000 Scripting Guide》的<Printing> (英文) 一章。如果您想獲得其他例外的相關資訊,只要繼續閱讀本專欄,一定會遇到幾個之前所提規則的例外狀況。


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首