Windows-Server-2008

作為計劃任務執行時,在 PowerShell 中使用 Excel.Application COM 對象時無法保存 Excel 工作簿

  • June 17, 2016

我遇到了一個問題,我自動創建了一個 Excel.Application COM 對象,將一些數據添加到工作簿中,然後將文件另存為 xlsx。

如果:

  • 我已經在 Powershell 互動式主機中,可以按順序執行每個命令,或者作為 ps1 執行。
  • 我從 cmd.exe 執行它,使用以下語法:powershell.exe -command “c:\path\to\powershellscript.ps1”
  • 我在 Windows 7 / Server 2008 R2 中創建了一個計劃任務,使用上述 powershell.exe -command 語法,並使用“僅在使用者登錄時執行”模式。

當我修改相同的計劃任務時它會失敗,但將其設置為“無論使用者是否登錄都執行”。

這是一個範例腳本,說明了我遇到的問題:

$Excel = New-Object -Com Excel.Application
$Excelworkbook = $Excel.Workbooks.Add()
$excelworkbook.saveas("C:\temp\test.xlsx")
$excelworkbook.close()

我有一個理論,如果我的配置文件沒有載入/如果它沒有在命令視窗中執行,COM 對象會以某種方式失敗。

關於在創建計劃任務時選擇哪些選項,或者在創建 Excel 對像或使用 SaveAs() 函式時使用哪些選項有什麼想法嗎?任何人都可以重現這個嗎?我已經能夠在 Server 2008 R2 機器和 Windows 7 上看到這種行為。還沒有嘗試過其他平台。

您是否在未登錄時嘗試實際執行它?如果是這樣,我會在這篇 Microsoft 知識庫文章中指出一些可能的原因:Office 伺服器端自動化的注意事項。標題說的是伺服器端,但文章還指定這適用於未在具有載入的使用者配置文件的互動式會話中執行的 Windows 客戶端版本。

如果您確實希望它在沒有使用者登錄的情況下執行它(使用您描述的選項,聽起來像您這樣做),最終我不確定您是否能夠解決您的問題,原因描述在文章。如果您只需要在登錄時執行它,就不要選擇該選項?

引用自:https://serverfault.com/questions/266794