我安排了这个 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)。
知道脚本不能在调度程序下正常运行的原因是什么吗?
任务计划程序任务在与正在进行的交互式会话不同的用户上下文中运行时,无法与该会话交互。
计划任务的隔离规则会随着每个新的 Windows 版本而变化,但请尝试将任务定义为“仅在用户登录时运行”。选择此选项后,您的用户帐户应显示在“运行任务时,使用以下用户帐户:”下。
如果您愿意,则无法与与您不同的用户帐户的桌面会话进行交互。