
Мне было поручено устранить неполадки сценария входа на клиентском сайте, который, помимо прочего, устанавливает принтер по умолчанию. Сценарий входа — это vbscript, а принтер устанавливается с помощью
Set WshNetwork = CreateObject("WScript.Network")
...
WshNetwork.SetDefaultPrinter(strPrinter)
Техник, который его настраивал, сказал, что работает. Клиент сказал, что нет. Мои тесты показывают, что он работает только с перерывами. Сейчас у меня что-то вроде этого:
WScript.Echo GetDefaultPrinter
For i = 0 to 50
if strPrinter <> GetDefaultPrinter then
WshNetwork.SetDefaultPrinter(strPrinter)
end if
Next
'WshNetwork.SetDefaultPrinter("Fax")
Msgbox("Called WshNetwork.SetDefaultPrinter(" & strPrinter & ")")
WScript.Echo GetDefaultPrinter
Function GetDefaultPrinter
sComputer = "."
Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\cimv2")
Set colItems = oWMIService.ExecQuery("Select * from Win32_Printer",,48)
For Each oItem in colItems
If (oItem.Attributes And 2^(3-1)) = 4 Then
sDefault = oItem.Name
Exit For
End If
Next
GetDefaultPrinter = sDefault
End Function
Это позволяет мне проверять принтер по умолчанию до и после попытки его изменить. Цикл, похоже, помог, но не решил проблему полностью. Иногда новый принтер установлен правильно, иногда я могу выйти из системы и снова войти, и он не может установить тот же принтер по умолчанию. Чтобы прояснить ситуацию, янетполный рабочий день администратора. Эта техника устарела? Мне следует использовать что-то другое для установки принтера по умолчанию?
Редактировать: Кроме того, нам нужно запомнить принтер по умолчанию, который пользователь мог установить или изменить во время сеанса, а затем установить этот принтер в качестве принтера по умолчанию.
решение1
Поскольку у вас есть Server 2008 и Windows 7, у вас есть возможность задать принтер по умолчанию через Group Policy Preferences. Мы используем это прямо сейчас, чтобы задать принтеры по умолчанию в наших компьютерных лабораториях. Это требует создания GPO для этих контейнеров, но вы можете получить довольно гранулярную настройку с ними.
В редакторе групповой политики политика находится по адресу...
Конфигурация пользователя -> Настройки -> Параметры панели управления -> Принтеры
Добавьте туда принтеры. Один из флажков — «сделать принтером по умолчанию». Это действительно работает.
решение2
Вместо использования объекта Network я запускаю команду напрямую: rundll32 printui.dll,PrintUIEntry /y /n "" похоже, все работает нормально