2015-09-16 69 views
1

我們有幾個經典的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 

回答

2

幾乎可以肯定的權限問題。您可能需要:

  1. 將服務器上的Web應用程序的標識更改爲有權訪問自動化IE的用戶。
  2. 如果它已經作爲特定用戶(而不是應用程序標識)運行,請確保用戶至少以交互方式運行IE一次。
  3. 更改DCOM啓動權限,以便應用程序標識可以打開它。

我也建議另一種可能性。創建一個計劃任務,每分鐘運行一次,檢查目錄(或某物)的某些內容以進行打印並打印。

該任務有權執行此操作。 Web應用程序獲得啓動任務的權限。 Web應用程序被利用的可能性較小。

相關問題