![](/img/trans.png)
[英]Windows Task Scheduler — Fails to run Powershell Scripts
[英]Powershell New-Object fails when run by Windows Task scheduler
我很確定這一定是某種奇怪的權限問題,但我找不到任何有效的方法。
這是問題所在:
我有一個 PowerShell 腳本,它執行到遠程站點的 FTP 傳輸。 它使用CuteFTP 傳輸對象。 該腳本由單行批處理文件調用。 如果我從 Windows 命令提示符中運行批處理文件,它會完美運行。 但是,如果從 Windows 任務計划程序調用批處理文件,則 PowerShell 腳本在嘗試創建 CuteFTP 對象時會失敗。 在這兩種情況下,批處理文件都是使用本地服務器上的管理員帳戶運行的。
事物的相關部分是:
批處理文件:
powershell.exe -File "D:\FTPToHost.ps1"
PowerShell 腳本:
$oSite = New-Object -ComObject CuteFTPPro.TEConnection
$oSite.Protocol = 'FTP'
$oSite.Host = "99.999.9.999"
$oSite.Login = 'UserID'
$oSite.Password = 'MyPassword'
Windows 任務計划程序通過以下命令運行:
D:\FTPToHost.cmd
批處理文件的執行在任務計划程序中工作,但是 PowerShell 腳本失敗並顯示錯誤:
New-Object : Retrieving the COM class factory for component with CLSID {112EA537-7AB9-4E22-8BFB-7FD5FCB19849} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). At D:\FTPToHost.ps1:6 char:10 + $oSite = New-Object -ComObject CuteFTPPro.TEConnection + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (:) [New-Object], COMException + FullyQualifiedErrorId : NoCOMClassIdentified,Microsoft.PowerShell.Commands.NewObjectCommand
據我所知,該問題看起來像是在任務計划程序運行 PowerShell 時未能建立正確的系統環境,因此未正確找到或實例化 ComObject。 正如我所提到的,如果我只是打開命令提示符並從命令行運行 .CMD 文件,一切都會按預期進行。
系統環境是 Windows Server 2016。任何想法將不勝感激。
規范
我是 PowerShell 的新手,我遇到了類似的場景,其中包含不同的應用程序、類似的任務調度條件以及相同的錯誤消息。 就我而言,應用程序的實例化
$oSite = 新對象 -ComObject Application.Application
實際上啟動了它,但 PowerShell 對象沒有綁定到它(我仍然不知道為什么)。
我最終做的是:
我最終使用的代碼如下所示:
$Proc = Get-Process process-name -ErrorAction SilentlyContinue
if (-Not($Proc -eq $Null)) {
$NewApplicationObject = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Application.Application")
$NewApplicationObject.Property = value
$NewApplicationObject.Quit()
$oSite = $null
}
我猜原始對象可以使用 GetActiveObject cmdlet(或其他任何東西)綁定回來,但我沒有嘗試。
我希望這對您或任何閱讀本文的人有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.