Нужно изменить скрипт VB, чтобы он сначала удалял все существующие сетевые принтеры
У нас есть фантастический VB-скрипт, который добавляет несколько сетевых принтеров, а затем выбирает один из них по умолчанию.
Dim multiPrinter, UNCpath1, UNCpath2, UNCpath3
UNCpath1 = "\\server\printer1"
UNCpath2 = "\\server\printer2"
UNCpath3 = "\\server\printer3"
Set multiPrinter = CreateObject("WScript.Network")
multiPrinter.AddWindowsPrinterConnection UNCpath1
multiPrinter.AddWindowsPrinterConnection UNCpath2
multiPrinter.AddWindowsPrinterConnection UNCpath3
Set WshNetwork = CreateObject("WScript.Network")
PrinterPath = "\\server\printer1"
PrinterDriver = "PrinterDriver"
WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver
WshNetwork.SetDefaultPrinter "\\server\printer1"
WScript.Quit
Это работает отлично - единственная проблема заключается в том, что он не удаляет существующие сетевые принтеры в первую очередь.
Это делается отдельно с помощью командного файла (в результате чего окно командной строки будет мигать на экране при входе в систему).
reg delete "hkcu\printers\connections" /f
Может, кто-нибудь посоветует мне, как функциональность пакетного файла может быть включена в скрипт VB.
Это довольно простой вопрос, но я новичок в VB-скриптинге. Благодарю.
2 ответа
В конце концов мне удалось найти то, что я искал с помощью поиска Google:
Мне нужен был скрипт VB:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * From Win32_Printer Where Network = True")
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
Я тщательно его протестировал, и он оставляет все PDF-принтеры и локально установленные принтеры неизменными - просто нацеливаясь на сетевые принтеры, как я хотел.
Надеемся, что это поможет другим людям, которые пытаются добиться действительно гладкой настройки принтера, развернутого с помощью групповой политики, без окон командной строки, мигающих на экране при входе в систему.
Примечание: из-за смешанной природы нашей среды (XP, Win7 x86 и Win7 x64) я вошел в систему как администратор на каждом ПК один раз, чтобы убедиться, что соответствующие драйверы для всех 3 принтеров были успешно установлены. Поэтому я не полагаюсь на этот скрипт для установки драйверов (хотя его легко настроить). Наши 2 машины Win7 x64 по какой-то причине не смогли извлечь нужные драйверы из сети (возможно, из-за того, что принтеры использовались на машине XP x86?). Зайдя в систему как администратор (и вручную указав правильный файл.ini, где это необходимо), я смог чтобы у пользователей не было неожиданных проблем с драйверами. Сценарий просто обеспечивает правильные очереди печати отображаются для каждого пользователя на каждом ПК. Я не был уверен, как настроить скрипт, чтобы выбрать правильную версию драйвера для нескольких типов ОС, и не хотел ничего оставлять на волю случая.
Во всяком случае, все вместе, весь скрипт VB делает следующие 3 вещи при входе в систему:
1) Удаляет все существующие очереди печати в этом профиле пользователя:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colInstalledPrinters = objWMIService.ExecQuery _
("Select * From Win32_Printer Where Network = True")
For Each objPrinter in colInstalledPrinters
objPrinter.Delete_
Next
2) Добавляет несколько очередей печати по мере необходимости:
Dim multiPrinter, UNCpath1, UNCpath2, UNCpath3
UNCpath1 = "\\server\printer1"
UNCpath2 = "\\server\printer2"
UNCpath3 = "\\server\printer3"
Set multiPrinter = CreateObject("WScript.Network")
multiPrinter.AddWindowsPrinterConnection UNCpath1
multiPrinter.AddWindowsPrinterConnection UNCpath2
multiPrinter.AddWindowsPrinterConnection UNCpath3
3) Устанавливает правильный принтер по умолчанию:
Set WshNetwork = CreateObject("WScript.Network")
PrinterPath = "\\server\printer1"
PrinterDriver = "PrinterDriver"
WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver
WshNetwork.SetDefaultPrinter "\\server\printer1"
WScript.Quit
Наслаждайтесь!
Вы можете попробовать это:
Set wshPrn = multiPrinter.EnumPrinterConnections
For x = 0 To wshPrn.Count - 1 Step 2
If Left(wshPrn.Item(x + 1), 2) = "\\" Then multiPrinter.RemovePrinterConnection wshPrn.Item(x + 1), True, True
Next
или в верхней части командного файла убедитесь, что у вас есть и перейдите по ссылке, чтобы минимизировать запуск файла bat
@echo off
http://www.computerhope.com/issues/ch000932.htm
Удачи!