通過組策略添加網絡打印機的腳本


,以下腳本適用於windows域環境中,用於主機自動添加域中的共享打印機。將文本存儲爲vbs格式即可使用。

' 添加網絡打印機的腳本v4
' 陳濤 [email protected] 2008/10/27 15:54:54
' http://msdn.microsoft.com/en-us/library/aa394363(VS.85).aspx
'****************************************************
'*  腳本名:     AddADPrinters.vbs
'*  編寫:  陳濤
'*  日期:       2008/10/28 22:15:54
'*  版本:    4 
'*  
'*  描述:
'*  1. 首先判斷當前用戶使用計算機所OU名,然後查看該OU中有無發佈的打印機,得到一個打印機的清單
'*  2. 然後,對本機已經安裝的打印機進行枚舉,也得到一份打印機的清單
'*  3. 對比這兩份清單,只安裝在本地沒有的打印機
'****************************************************
On Error Resume Next  
' 得到用戶的信息
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
strAdsPath=objUser.AdsPath
strOUName = "LDAP://" &  Mid(strAdsPath, InStr(strAdsPath,",")+1)
' 得到用戶所在OU的打印機
Const ADS_SCOPE_SUBTREE = 2
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand =   CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = "Select printerName, serverName from " _
    & "'" & strOUName & "'  where objectClass='printQueue'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Timeout") = 30 
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
objCommand.Properties("Cache Results") = False 
Set objRecordSet = objCommand.Execute
Dim objDictPrnts: Set objDictPrnts = CreateObject("Scripting.Dictionary")
objDictPrnts.CompareMode = vbTextCompare
' 添加到一個字典中
Do Until objRecordSet.EOF
    'Wscript.Echo "Printer Name: " & objRecordSet.Fields("printerName").Value
    'Wscript.Echo "Server Name: " & objRecordSet.Fields("serverName").Value
    objDictPrnts.Add "\\" & objRecordSet.Fields("serverName").Value &_
        "\" & objRecordSet.Fields("printerName").Value, _
        UCase(objRecordSet.Fields("printerName").Value)
'        WScript.Echo "Found Printer: " & objRecordSet.Fields("printerName").Value
    
    '只取第一個
    'objRecordSet.MoveNext
    Exit Do
Loop
' loop through printer connections
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
Dim WSHPrinters, LOOP_COUNTER
Set WSHPrinters = WSHNetwork.EnumPrinterConnections
If WSHPrinters.Count= 0 Then
' 如果沒有任何不存在任何打印機,則直接添加
For Each PrinterPath In objDictPrnts.Keys
'WScript.Echo "11111Connecting to printer: " & PrinterPath
WSHNetwork.AddWindowsPrinterConnection PrinterPath
Next
Else
For LOOP_COUNTER = 0 To WSHPrinters.Count - 1 Step 2
Dim PrinterPath
PrinterPath = WSHPrinters.Item(LOOP_COUNTER +1)
If objDictPrnts.Exists(PrinterPath) Then 
    ' 如果此添加存在,即退出
    'WScript.Echo "Printer already Exists, removing from connect to list.: " &_
    'vbCrLf & PrinterPath & vbCrLf
    Exit For
Else
For Each PrinterPath In objDictPrnts.Keys
WScript.Echo "22222Connecting to printer: " & PrinterPath
WSHNetwork.AddWindowsPrinterConnection PrinterPath
Next
End If
Next
End If


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章