Powershell 脚本在任务计划程序下的运行方式不同

Powershell 脚本在任务计划程序下的运行方式不同

我已经安排了这个 powershell 脚本(从技术上讲,它由 cmd 文件运行,但请参见下文)。该脚本是

(New-Object -ComObject 'Shell.Application').Windows() | ForEach-Object {
   $localPath = $_.Document.Folder.Self.Path
   "C:\WINDOWS\explorer.exe /e, `"$localPath`"" 
} > reabrir.cmd

whoami >> reabrir2.cmd
pwd >> reabrir2.cmd

我复制的第一个命令从这个网站. 它写入打开的资源管理器窗口(路径)列表。

  • 该脚本按预期运行,无论是直接从 powershell 运行还是从 cmd 脚本运行:它将对应于打开的资源管理器窗口的路径列表写入 reabrir.cmd,将用户名和工作目录写入 reabrir2.cmd。

  • 该脚本确实会按计划运行,因为它每次都会将正确的用户名和工作目录写入文件 reabrir2.cmd。

  • 但是,在调度程序下运行时,它不会触及文件 reabrir.cmd;也就是说,第一个命令由于某种原因失败。

  • 如果我将脚本设置为由调度程序直接运行而不是通过 cmd 脚本运行,则会出现同样的问题(脚本确实运行,但它不会触及文件 reabrir.cmd)。

知道脚本无法在调度程序下正常运行的原因是什么吗?

答案1

当任务计划程序任务在与正在进行的交互会话不同的用户上下文中运行时,无法与该会话交互。

计划任务的隔离规则会随着每个新 Windows 版本而变化,但请尝试使用“仅在用户登录时运行”来定义任务。选择此选项后,您的用户帐户应显示在“运行任务时,使用以下用户帐户:”下。

如果您愿意的话,没有办法与不同于您的用户帐户的桌面会话进行交互。

相关内容