1

Тема: 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