计划任务不能使用x86版本的Powershell运行

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

的%SystemRoot%\ SysWow64资料\ WindowsPowerShell \ V1.0 \ powershell.exe

当我手动运行脚本时,脚本工作,但不通过Windows任务计划程序运行。 我正在运行该任务作为运行该脚本的同一个用户。 在我的任务的行动部分,我把上面的地址作为程序/脚本 ,我写我的.ps1文件的完整path作为添加参数(可选) 。 但似乎没有工作。 我也尝试将我的.ps1文件的父文件夹作为开始价值无济于事。

我如何告诉任务计划程序使用32位版本运行我的Powershell脚本?

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

高度怀疑Excel是这似乎不起作用的原因。 让你的脚本做非Excel的东西(如创build文件),并检查这部分是否执行正常

自动化Excel时遇到的两个主要问题:

  1. 创build空文件夹,如果他们不存在(Excel自动化错误)

  2. 确保DCOM安全设置已configuration为允许Excel运行。 如果您正在以手动运行脚本的相同用户的身份运行任务,则仍然需要这样做。

当DCOM权限设置不正确并将脚本作为自动化任务运行时,将会出现以下错误。 看到会议被转录,并转录输出到文本文件 。

New-Object:检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因如下:80070005访问被拒绝。 (从HRESULTexception:0x80070005(E_ACCESSDENIED))。

你可以通过你的脚本来确定当前的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调用,以防脚本需要它们。