Сценарий отлично работает при запуске от имени администратора на локальном компьютере, но при развертывании через GPO, поскольку сценарий запуска получает «доступ запрещен» из SWbemObjectEx.put_. Вот весь сценарий:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
On Error Resume Next
''--- in case the driver is already there
REM *** Installs printer driver needed for Universal PS 64 Bit
Set objDriver = objWMIService.Get("Win32_PrinterDriver")
objDriver.Name = "HP Universal Printing PS"
objDriver.FilePath = "\\share$\Drivers\Printers\HP\HP-Universal\x64\"
objDriver.InfName = "\\share$\Drivers\Printers\HP\HP-Universal\x64\hpcu155v.inf"
objDriver.SupportedPlatform = "Windows NT x64"
objDriver.Version = "3"
errResult = objDriver.AddPrinterDriver(objDriver)
rem *** Installs a TCP/IP printer local port on a computer
Set objNewPort = objWMIService.Get _
("Win32_TCPIPPrinterPort").SpawnInstance_
objNewPort.Name = "IP_172.17.87.226"
objNewPort.Protocol = 1
objNewPort.HostAddress = "172.17.87.226"
objNewPort.PortNumber = "9100"
objNewPort.SNMPCommunity = "public"
objNewPort.SNMPEnabled = False
objNewPort.Put_
rem *** installs printer
Set objPrinter = objWMIService.Get("Win32_Printer").SpawnInstance_
objPrinter.DriverName = "HP Universal Printing PS"
objPrinter.PortName = "IP_172.17.87.226"
objPrinter.DeviceID = "HP LaserJet P2055dn in TPCS-400"
objPrinter.Shared = False
objPrinter.Location = "TPCS-400"
objPrinter.Put_
Я использовал вторую версию скрипта для отладки, добавив такие либеральные записи:
writeLineToLog("addPrinterDriver errResult=" & errResult)
If Err.Number <> 0 Then
writeLineToLog("Error: " & Err.Number)
'writeLineToLog("Error (Hex): " & Hex(Err.Number))
writeLineToLog("Source: " & Err.Source)
writeLineToLog("Description: " & Err.Description)
Err.Clear
End If
и еще один для определения текущего пользователя, вот результат отладки:
starting script at 2/16/2017 2:41:29 PM
addPrinterDriver errResult=0
after Installs a TCP/IP printer local port on a computer
The current user is SYSTEM
after Set objPrinter
after objPrinter.DriverName =
after objPrinter.PortName =
after objPrinter.DeviceID =
after objPrinter.Shared =
after objPrinter.Location=
after objPrinter.Put_
after Installs printer
Error: -2147217405
Source: SWbemObjectEx
Description: Access denied
Ошибка возникает при попытке последнего put_.
Это политика GPO пользователя или компьютера? Я подозреваю, что если это пользователь, у фактического пользователя может не быть разрешений на добавление принтера.
Вы можете попробовать следовать это руководство из блога MSDN чтобы предоставить пользователю доступ. Хотя я лично рекомендовал бы вам развертывать принтеры с помощью встроенных функций GPO, которые вы можете найти руководство здесь.