Нужно изменить скрипт 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:

http://community.spiceworks.com/topic/128389-is-it-possible-to-delete-all-offline-network-printers-with-vbscript-on-logon

Мне нужен был скрипт 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

Удачи!

Другие вопросы по тегам