Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 计划任务未使用x86版本的Powershell运行_Excel_Powershell_Scheduled Tasks - Fatal编程技术网

Excel 计划任务未使用x86版本的Powershell运行

Excel 计划任务未使用x86版本的Powershell运行,excel,powershell,scheduled-tasks,Excel,Powershell,Scheduled Tasks,我编写了一个Powershell脚本,它保存在.ps1文件中。它仅适用于位于中的32位版本的Powershell %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe 当我手动运行脚本时,它可以工作,但它不是通过Windows任务计划程序运行的。我以运行脚本的用户身份运行任务。在任务的操作部分,我将上面的地址作为程序/脚本,并将.ps1文件的完整路径作为Add参数(可选)写入。但它似乎不起作用。我也尝试过将我的.ps1文件的父文件

我编写了一个Powershell脚本,它保存在
.ps1
文件中。它仅适用于位于中的32位版本的Powershell

%SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe

当我手动运行脚本时,它可以工作,但它不是通过Windows任务计划程序运行的。我以运行脚本的用户身份运行任务。在任务的操作部分,我将上面的地址作为程序/脚本,并将.ps1文件的完整路径作为Add参数(可选)写入。但它似乎不起作用。我也尝试过将我的.ps1文件的父文件夹作为起始值,但没有成功

如何让任务计划程序使用32位版本运行Powershell脚本


更新:我必须在这里添加,我的脚本实际上打开了一个Excel文件,刷新它,然后关闭它。我知道在非交互式环境中使用Excel是个坏主意。但我仍然不知道这是否是我的脚本未运行的原因。

您可以采用您的脚本来确定当前的powershell版本,并在必要时使用32位版本调用相同的脚本。将以下行放在脚本顶部:

# ensure the script is running with the 32bit powershell
if ($env:Processor_Architecture -ne "x86")
{
    $psx86 = Join-Path $env:SystemRoot '\syswow64\WindowsPowerShell\v1.0\powershell.exe'
    & $psx86 -noprofile -file $myinvocation.Mycommand.path -executionpolicy bypass
    exit
}

注意:如果脚本需要,您可以将参数附加到powershell调用中。

高度怀疑Excel是这似乎不起作用的原因。让脚本执行非Excel的操作(例如创建文件),并检查此部分是否执行良好

在自动化Excel时,我遇到了两个主要问题:

  • 如果您以手动运行脚本的同一用户的身份运行任务,则仍然需要执行此操作

  • 如果DCOM权限设置不正确,并且脚本作为自动任务运行,则会出现以下错误

    新对象:检索具有CLSID的组件的COM类工厂 {00024500-0000-0000-C000-0000000000 46}由于以下原因失败 错误:80070005访问被拒绝。(HRESULT的例外情况:0x80070005 (E_)


    但恐怕这不是问题所在。问题是这整件事都不喜欢被安排。您可以使用任务计划程序中的
    powershell-file…
    调用您的常规脚本。