Тема: VBScript: подключение сетевых принтеров с использованием AD
Скрипт удаляет все сетевые принтеры, затем находит текущего пользователя в Active Directory, считывает из указанного поля Active Directory список принтеров и пытается подключить их.
Список принтеров должен храниться в одном поле Active Directory, разделитель - перевод строки. Принтеры должны храниться в формате "\\serverName\PrinterName". Принтером по умолчанию назначается первый принтер в списке.
Скрипт ведёт лог по указанному пути (перезаписывается при каждом запуске).
Option Explicit
On Error Resume Next
Dim Domain, Field, LogPath ' настройки
Dim WshNetwork, AdoConn, FSO ' объекты серверов автоматизации
Dim TextStream ' объект файлового потока лога
Dim Printers ' коллекция установленных принтеров
Dim i ' счётчик, флаг
Dim PrnName ' имя установленного принтера
Dim Query ' текст запроса к Active Directory
Dim Rs ' объект рекордсета
Dim ObjectOfAD ' объект текущего пользователя в Active Directory
Dim Info ' список принтеров, хранящихся в Active Directory (строка)
Dim PrinterPath ' имя устанавливаемого принтера
' => НАСТРОЙКИ ====================================================================================
Domain = "DC=mydomain,DC=ru" ' имя домена
Field = "info" ' имя поля Active Directory, в котором хранится список принтеров
LogPath = "C:\PrintersConnection.log" ' путь к файлу лога
' <= НАСТРОЙКИ ====================================================================================
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TextStream = FSO.OpenTextFile(LogPath, 2, True)
Set WshNetwork = CreateObject("WScript.Network")
Set Printers = WshNetwork.EnumPrinterConnections
i = 0
While i <= Printers.Count-1
PrnName = Printers.Item(i+1)
If Left(PrnName, 2) = "\\" Then ' только сетевые принтеры
WshNetwork.RemovePrinterConnection PrnName
If Err.Number Then
TextStream.WriteLine "не удалось удалить сетевой принтер: " & PrnName
TextStream.WriteLine Err.Number & " " & Err.Description
Err.Clear
Else
TextStream.WriteLine "удалён сетевой принтер: " & PrnName
End If
Else
TextStream.WriteLine "обнаружен несетевой принтер: " & PrnName
End If
i = i+2
Wend
Set AdoConn = CreateObject("ADODB.Connection")
If Err.Number Then
TextStream.WriteLine "не удалось создать объект ADODB.Connection"
TextStream.WriteLine Err.Number & " " & Err.Description
Err.Clear
End If
AdoConn.Provider = "ADSDSOObject"
AdoConn.Open "Active Directory Provider"
Query = "SELECT ADsPath FROM 'LDAP://" & Domain & "' WHERE sAMAccountName='" & WshNetwork.UserName & "'"
Set Rs = AdoConn.Execute(Query)
If Err.Number Then
TextStream.WriteLine "не удалось выполнить запрос к Active Directory: " & Query
TextStream.WriteLine Err.Number & " " & Err.Description
Err.Clear
End If
If Not Rs.EOF Then
Set ObjectOfAD = GetObject(Rs.Fields(0).Value)
Info = ObjectOfAD.Get(Field)
i = True
If Len(Info) = 0 Then
TextStream.WriteLine "поле Active Directory '" & Field & "' пусто"
End If
For Each PrinterPath In Split(Info, vbCrLf)
WshNetwork.AddWindowsPrinterConnection PrinterPath
If Err.Number Then
TextStream.WriteLine "не удалось подключить принтер: " & PrinterPath
TextStream.WriteLine Err.Number & " " & Err.Description
Err.Clear
Else
TextStream.WriteLine "подключён принтер: " & PrinterPath
End If
If i Then
WshNetwork.SetDefaultPrinter PrinterPath
If Err.Number Then
TextStream.WriteLine "не удалось назначить принтером по умолчанию: " & PrinterPath
TextStream.WriteLine Err.Number & " " & Err.Description
Err.Clear
Else
TextStream.WriteLine "принтер назначен принтером по умолчанию: " & PrinterPath
i = False
End If
End If
Next
Else
TextStream.WriteLine "запрос к Active Directory вернул пустой результат: " & Query
End If
AdoConn.Close
TextStream.CloseВ названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

