由Windows Task Scheduler运行时,Powershell新对象失败

时间:2019-01-28 17:59:45

标签: powershell batch-file task taskscheduler comobject

我很确定这一定是某种奇怪的权限问题,但是我找不到任何有效的方法。

问题出在这里

我有一个PowerShell脚本,可以执行FTP传输到远程站点。它使用CuteFTP传输对象。该脚本由单行批处理文件调用。如果我从Windows命令提示符下运行该批处理文件,它将运行完美。但是,如果从Windows Task Scheduler调用了批处理文件,则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 Task Scheduler通过以下命令运行它:

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 Server2016。任何想法都将不胜感激。

范本

1 个答案:

答案 0 :(得分:0)

我是PowerShell的新手,我遇到了具有不同应用程序的类似情况,与计划任务相似的条件以及相同的错误消息。就我而言,该应用程序的实例化

$ oSite =新对象-ComObject Application.Application

实际上启动了它,但是PowerShell对象没有绑定到它(我仍然不知道为什么)。

我最终要做的是:

  1. 获取应用程序的流程(在此之前添加检查会很有帮助)。
  2. 将PowerShell对象绑定到进程。
  3. 使用最近绑定的对象设置属性或调用方法。

我最终使用的代码如下:

$Proc = Get-Process process-name
if (-Not($Proc -eq $Null)) {
    $NewApplicationObject = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Application.Application")
    $NewApplicationObject.Property = value
    $NewApplicationObject.Quit()
    $oSite = $null
}

我想可以使用GetActiveObject cmdlet(或其他任何方法)将原始对象绑定回去,但我没有尝试过。

我希望这对您或任何阅读本文的人都有用。