我在用户登录时从任务计划程序运行编码的 powershell 命令。该命令会进行一些评估,并向用户显示一个消息框。我遇到的问题是,无论我使用什么开关,PowerShell 窗口仍然闪烁。 注意: 脚本本身运行良好。
这是我在任务计划程序中的内容:
powershell.exe -WindowStyle Hidden -executionpolicy bypass -noninteractive -encodedcommand "COMMAND"
我在这里缺少什么吗?
powershell.exe
是 Windows console 子系统应用程序(与 pwsh.exe
、PowerShell(核心)CLI 一样)。
因此,Windows 当前总是在启动时为其创建一个 - 最初可见 - 控制台窗口,并且只有之后 PowerShell 才能遵循
-WindowStyle Hidden
并隐藏窗口[1] - 这会导致你看到的闪烁。
NT AUTHORITY\SYSTEM
身份运行或使用 Run whether user is logged on or not
选项运行)来从根本上不可见地运行计划任务,但是这样您就不会能够与用户的桌面进行交互,这就是您的意图。
GitHub 问题 #3028 中进行了讨论。
解决方法是使用GUI子系统wrapper应用程序来启动powershell.exe
隐藏 - 请参阅此答案的底部部分了解具体选项。
未来的 Windows 增强,控制台分配策略将提供一个解决方案:控制台的有条件分配,这将允许应用程序根据运行时决定是否为自己分配控制台条件。
我不清楚此功能何时可用(或者即使它保证会实现,但我预计它会实现)。
pwsh.exe
可能会更新。[1] 如果 Windows Terminal 是默认终端应用程序,则生成的窗口当前仅为 最小化,这是有问题的 - 请参阅 WT GitHub 问题 #12464。