У нас есть несколько классических приложений ASP, которые в конечном итоге должны печатать отчет на принтер с веб-сервера.Открытый IE с использованием Powershell на Windows Server 2012
Я использую ввод от пользователя для создания отчета на сервере (на стороне сервера). Я храню его в html-файле на сервере. Затем я передаю имя файла и printername сценарию powershell. Сценарий powershell вызывает IE и печатает файл. Замечательно! Не так быстро!
На моем компьютере он отлично работает (я запускаю IIS и поэтому должен имитировать веб-сервер).
Однако, когда я положил все это на веб-сервере ошибка я получаю в моем журнале есть: номер
Ошибка: -2147024891
Описание ошибки: Получение класса COM фабрика для компонента с CLSID {0002DF01-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80070005 Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)).
Ошибка Источник:$ie = new-object -comObject InternetExplorer.Application
Есть ли установка IIS или некоторые другие настройки в ОС Windows 2012 R2, которая может вызвать это и его изменение приведет его на работу?
Powershell следующим образом:
Function LogWrite
{
Param ([string]$logstring)
Add-content $Logfile -value $logstring
}
$newline = [Environment]::NewLine
$FileName = $args[0]
$PrinterName = $args[1]
$Logfile = $args[2]
$strReturn = "0^Successful"
"Filename: " + $FileName
"Printer: " + $PrinterName
#Send To named printer
try
{
#Change the Default Printer
(Get-WmiObject -ComputerName . -Class Win32_Printer -Filter "Name='$PrinterName'").SetDefaultPrinter()
#Print a file from Microsoft Word (which can apply formatting changes)
$ie = new-object -comObject InternetExplorer.Application
$ie.Navigate($FileName)
while ($ie.busy) { Start-Sleep -second 5 }
$ie.ExecWB(6,2)
}
catch
{
$strMessage = $error[0].Exception.Message
$strHResult = $error[0].Exception.HResult
$strLine = $error[0].InvocationInfo.Line
$strReturn = "1^Error attempting to print report.^" + $strHResult + "^" + $strMessage + "^Line: " + $strLine
}
finally
{
# garbage collection
[gc]::collect()
[gc]::WaitForPendingFinalizers()
#exit $strReturn
}
# write to a log file
# Log file time stamp:
$LogTime = Get-Date -Format "MM/dd/[email protected]:mm:ss"
$LogRecord = $LogTime + "^" + $FileName + "^" + $PrinterName + "^" + $strReturn
LogWrite $LogRecord
$strReturn