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

标签 powershell scripting ms-word scheduled-tasks

我正在尝试使用 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 block 显然永远不会到达,因为 print 语句永远不会到达文件,但 $doc 始终为 null。

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

总结一下:

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

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

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

尝试在脚本中设置 $word.visible = $true 从任务计划程序启动时实际上并没有显示任何内容,因此我不知道如何验证它是否正在等待用于输入,或者如何以正确的用户身份为其提供输入以使其消失......

最佳答案

您也许可以按照问题 How to run a Windows 2008 task from the scheduler with "interact with desktop" 中指定的解决方案进行操作.

摘要:如果您有 64 位 Windows:创建 %SystemRoot%\SysWOW64\config\systemprofile\Desktop。如果您使用的是 32 位 Windows,请创建 %SystemRoot%\system32\config\systemprofile\Desktop

关于从任务计划程序运行的Powershell脚本无法打开Word文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24916290/

相关文章:

scala - 如何让 "scalas"脚本运行程序更安静?

VBA-Word 错误 : Undo list get error if use UndoRecord to record "Replace All" while there is a "Apply Quick Style" in the undo list. 如何避免?

java - Apache POI,.getRuns() 未返回所有运行

c# - 在 MS Word 中填写表格需要花费大量时间

powershell - robocopy/MIR - 不要删除目标中的 desktop.ini

具有多个输入字段的 Powershell 输入框

powershell - 如何在 PowerShell 中标准化路径?

powershell - 如何使用巧克力创建和安装 powershell 命令包?

linux - 内联 if shell 脚本

objective-c - 如何编写 xcode 用户脚本以使用 NSLocalizedString(<string>, nil) 包围光标所在的字符串