从任务计划程序运行的Powershell脚本无法打开Word文档

问题描述 投票:0回答:2

我正在尝试使用 powershell 脚本从多个单词文件中获取字数,然后将其输出到 csv 文件。从 powershell 提示符运行时,它可以按预期工作,并且直接从 cmd 提示符或从 perl 脚本内部调用时可以工作,但是当作为计划任务调用时,该脚本无法工作。

不是导致脚本根本无法运行的 ExecutionPolicy 问题。该脚本正在运行并产生一些输出,但是当从任务计划程序启动时,它无法打开任何 Word 文档。

相关powershell代码如下:

$folderpath = "C:\some\where\*"
$fileTypes = "*.docx"

$word = New-Object -ComObject word.application
$word.visible = $false
Get-ChildItem -path $folderpath -recurse -include $fileTypes |
foreach-object `
{
  $path =  ($_.fullname).substring(0,($_.FullName).lastindexOf("."))

  try {
    $doc = $word.documents.open($_.fullname, $confirmConversion, $readOnly, $addToRecent, $passwordDocument)
  } catch {
    "FROM CATCH UNABLE TO OPEN $($_.fullname)" >> $wordCountFile
  }
  if($doc) {
    $wordCount = $doc.ComputeStatistics("wdStatisticWords")
    "$($_.name), $wordCount"  >> $wordCountFile
    $doc.close([ref]$false)
  } else {
    "UNABLE TO OPEN $($_.fullname)" >> $wordCountFile
  }

} #end Foreach-Object
$word.Quit()

(请注意,人们引用的用于从 Word 文档获取字数统计的替代方法实际上并不像此方法那样返回正确的计数当它起作用时。)

作为计划任务运行时(设置为以最高权限运行并以管理员用户身份运行),使用:

cmd /c start PowerShell.exe -NoLogo -NonInteractive -ExecutionPolicy Bypass -File "C:\path\to\script\CountsInWords.ps1"

或者当从计划任务(我的正常用例)启动的 perl 脚本中使用类似的命令运行时,并且在这两种情况下,任务都设置为以最高权限运行,powershell 脚本无法正常工作。

catch 块显然永远不会到达,因为 print 语句永远不会到达文件,但是 $doc 始终为空。

此外,当作为任务启动时,脚本会打开一个字进程,并为 1 个线程使用 100% 的 cpu,这最终会损坏我的机器。

总结一下:

以人类方式运行脚本(无论有多少间接级别)-> 完美运行

从任务运行脚本(以管理员用户身份)-> 脚本运行但无法访问 Word 文档,也无法停止 Word 进程,尽管总是点击 $word.Quit 行。

编辑:根据@TheMadTechnician关于新用户首次启动办公室的建议,需要一些详细信息:在进一步检查中,查看任务管理器中的流程,我看不到流程一词,除非我单击“显示所有用户的流程” ”,但随后他们出现了,但用户被列为我。一个进程如何既明确列为我,又算作另一个用户?

尝试在脚本中设置

$word.visible = $true
从任务计划程序启动时实际上并没有显示任何内容,所以我不知道如何验证它是否正在等待输入,或者如何将输入作为正确的输入用户让它消失...

powershell scripting ms-word scheduled-tasks
2个回答
4
投票

您可以按照问题如何通过“与桌面交互”从计划程序运行 Windows 2008 任务中指定的解决方案进行操作。

总结:如果您有 64 位 Windows:创建

%SystemRoot%\SysWOW64\config\systemprofile\Desktop
。如果您有 32 位 Windows,请创建
%SystemRoot%\system32\config\systemprofile\Desktop


0
投票

对于那些仍然在解决这个问题并且上述解决方案不起作用的人,在类似问题的评论中如何通过“与桌面交互”从调度程序运行Windows 2008任务有一个“正确”解决方案的提示与此处和该问题中给出的解决方法相比。

我对适用于我的“Microsoft Excel 应用程序”的 dcom 标识进行了一些更改。我已将身份更改为“此用户”并提供了管理员帐户凭据。这对我来说效果很好,我们的 Sharepoint Web 部件开始按应有的方式工作。 – 用户565947

当 Office 应用程序由 Scheduler 打开时,似乎存在用户冲突,并且在 DCOM 权限下明确声明您的用户登录可以修复此问题:更改 DCOM 权限。 按照步骤进行操作,直到步骤 5,将登录名更改为“此用户”并输入运行计划程序的帐户的登录凭据,该帐户也应该是具有 Microsoft Office 许可证的帐户。

© www.soinside.com 2019 - 2024. All rights reserved.