Назад | Перейти на главную страницу

Необходимо изменить сценарий 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. Спасибо.

В конце концов мне удалось найти то, что я искал, с помощью поиска 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

или В верхней части вашего командного файла убедитесь, что у вас есть, и перейдите по ссылке, чтобы запустить свернутый файл.

@echo off

http://www.computerhope.com/issues/ch000932.htm

Удачи!