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

时间:2015-11-04 08:41:26

标签: excel powershell scheduled-tasks

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

中的32位版本的Powershell
  

%SYSTEMROOT%\ SysWow64资料\ WindowsPowerShell \ V1.0 \ powershell.exe

该脚本在我手动运行时有效,但不能通过 Windows任务计划程序运行。我正在以运行脚本的同一用户身份运行任务。在我的任务的 Action 部分中,我将上述地址作为 Program / script ,我将.ps1文件的完整路径写为 Add Arguments(可选) 。但它似乎没有用。我也试过把我的.ps1文件的父文件夹作为开始值无效。

如何告诉Task Scheduler使用32位版本运行我的Powershell脚本?

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

2 个答案:

答案 0 :(得分:2)

高度怀疑Excel是看起来不起作用的原因。让您的脚本执行非Excel(例如创建文件)并检查此部件是否正常执行

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

  1. Create empty folders if they don't exist (excel automation bug)

  2. Ensure DCOM security settings are configured to allow Excel to run.如果您以手动运行脚本的同一用户身份运行任务,则仍然需要此功能。

  3. 如果未正确设置DCOM权限并将脚本作为自动任务运行,则会出现以下错误。 Saw this as session was transcribed, and transcription output to text file

      

    New-Object:使用CLSID检索组件的COM类工厂   {00024500-0000-0000-C000-000000000046}由于以下原因而失败   错误:80070005访问被拒绝。 (HRESULT的例外情况:0x80070005   (E_ACCESSDENIED))。

答案 1 :(得分:0)

您可以采用您的脚本来确定当前的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调用。