我們有幾個經典的ASP應用程序,最終需要從Web服務器打印報告到打印機。在Windows Server 2012上使用Powershell打開IE
我正在使用來自用戶的輸入在服務器(服務器端)上構建報告。我將它存儲在服務器上的html文件中。然後我將文件名和printername傳遞給powershell腳本。 powershell腳本正在調用IE並打印文件。精彩!不那麼快!
在我的電腦上它工作得很好(我運行IIS,所以它應該模仿一個Web服務器)。
然而,當我把它所有的Web服務器上我得到我的日誌中的錯誤是:
錯誤號: -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