嗨,Scripting Guy!

嗨,Scripting Guy!

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

還有,別忘了瞧瞧全新經過改良的《嗨,Scripting Guy!過往文件》。

今天的問題:如何使用指令碼將印表機重新命名?


如何使用指令碼將印表機重新命名?

嗨,Scripting Guy! 我要如何使用指令碼將印表機重新命名呢?

-- SB

SB,您好。如果您的印表機是連接到 Windows 2000 或 Windows NT 4.0 列印伺服器,很抱歉,您不能利用指令碼將印表機重新命名,至少不能使用作業系統提供的技術將它重新命名。(也許可以利用協力廠商工具,在舊版 Windows 上面執行)。不過如果印表機是連接到執行 Windows XP 或 Windows Server 2003 的電腦,那就好辦多了。

因為Win32_Printer 類別 (它可以廣泛用於 Windows XP 和 Windows Server 2003) 有一個名符其實的新方法 RenamePrinter。您想要利用指令碼,為印表機重新命名嗎?沒問題:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colPrinters = objWMIService.ExecQuery _
    ("Select * From Win32_Printer Where DeviceID = 'HP'")
For Each objPrinter in colPrinters
    objPrinter.RenamePrinter("ArtDepartmentPrinter")
Next

指令碼一開始先連接到本機電腦的 WMI 服務。接著我們再以下面這行程式碼,擷取所有安裝在這部電腦上,名為 HP 的印表機集合:

Set colPrinters = objWMIService.ExecQuery _
    ("Select * From Win32_Printer Where DeviceID = 'HP'")

由於印表機名稱必須是專屬名稱,因此傳回的集合最多只有一個項目。我們先設定一個 For Each 迴圈,循迴執行這個集合,然後再使用下面這行程式碼,將印表機重新命名:

objPrinter.RenamePrinter("ArtDepartmentPrinter")

作法很簡單,只要呼叫 RenamePrinter 方法,代入一個參數作為印表機的新名稱即可,因為我們只是呼叫方法,並不要變更讀寫屬性的值,甚至不必使用 Put_ 方法來儲存變更。

只要一變更印表機名稱,共用名稱可能也得跟著變更。您可以先變更印表機名稱,再連接到這個「新」印表機,接著再修改 ShareName 屬性,就完成這個步驟了。請注意,即使印表機目前沒有共用,您也可以變更共用名稱。

下面就是一個經過修改的指令碼,這個指令碼先變更印表機名稱,再變更共用名稱:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colPrinters =  objWMIService.ExecQuery _
    ("Select * From Win32_Printer Where DeviceID = 'HP'")
For Each objPrinter in colPrinters
    objPrinter.RenamePrinter("ArtDepartmentPrinter")
Next
Set colPrinters = objWMIService.ExecQuery _
    ("Select * From Win32_Printer Where DeviceID = 'ArtDepartmentPrinter' ")
For Each objPrinter in colPrinters
    objPrinter.ShareName = "ArtDepartmentPrinter"
    objPrinter.Put_
Next

如您所見,我們先變更印表機名稱,再以下面這行程式碼重新連接該印表機,不過這次就改用新名稱 ArtDepartmentPrinter:

Set colPrinters = objWMIService.ExecQuery _
    ("Select * From Win32_Printer Where DeviceID = 'ArtDepartmentPrinter' ")

我們先設定一個 For Each 迴圈,循迴執行這個印表機集合 (同樣的,該集合也只有一個項目)。在這個迴圈裡面,我們變更 ShareName 屬性的值,再呼叫 Put_ 方法來儲存變更。(我們之前暗示過了,只要您一變更讀寫屬性的值,就必須呼叫 Put_ 方法來儲存變更)。這麼一來,就賦予印表機新的名稱和共用名稱,當然還有全新的生命了。

如需詳細資訊

請參閱嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首