Тема: VBS: Переназначение принтсервера
Столкнулся с проблемой переброса принтеров на другой принтсервер
Долго нудно скучно но вот что получилось:
Dim PrnName ' имя установленного принтера
Dim Printers ' коллекция установленных принтеров
Dim WshNetwork, FSO ' объекты серверов автоматизации
Dim TextStream ' объект файлового потока лога
Dim i ' счётчик, флаг
Dim PrinterPath ' имя устанавливаемого принтера
Dim Tmp 'временная переменная
'============================================================
LogPath = "C:\Data\Documents\PrintersConnection.txt" ' путь к файлу лога
NetworkPr = "C:\Data\Documents\NetworkPr.txt" ' путь к файлу c сетевыми принтерами
'============================================================
Set FSO = CreateObject("Scripting.FileSystemObject")
'FSO.CreateFolder "C:\Data\Documents\" 'создание папки если надо
Set TextStream = FSO.OpenTextFile(LogPath, 2, True) 'создание файла лога
Set NetworkPr = FSO.OpenTextFile(NetworkPr, 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 ' только сетевые принтеры
Tmp = Right(PrnName, 8) 'вырезание нужной части (при условии что у Вас монотонные названия сет. принтеров)
NetworkPr.WriteLine Tmp 'запись в файл имен принтеров
WshNetwork.RemovePrinterConnection PrnName
Else
If Err.Number Then 'если ошибка
TextStream.WriteLine "не удалось удалить сетевой принтер: " & PrnName 'комент ошибкт
TextStream.WriteLine Err.Number & " " & Err.Description 'комент ошибкт
Err.Clear
Else
End If
TextStream.WriteLine "обнаружен несетевой принтер: " & PrnName 'Запись в файл не сетевых принтеров
End If
i = i+2
Wend
'===========================================================
Tmp = 0 'обнуление временной переменной
NetworkPr.Close
NetworkPr = "C:\Data\Documents\NetworkPr.txt"
i = True
Set tsLog = FSO.OpenTextFile(NetworkPr, 1,True)
Do While Not tsLog.AtEndOfStream
Tmp = tsLog.ReadLine
PrinterPath = "\\mokwps01\"&Tmp
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
'Else
'End If
Loop
MsgBox ("^O-O^ Задание выполнено насяльника")
tsLog.close
TextStream.Close