У нас есть фантастический сценарий 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:
Мне нужен был сценарий 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
Удачи!