在没有窗口的情况下从任务计划程序运行 PowerShell 脚本

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

我在用户登录时从任务计划程序运行编码的 powershell 命令。该命令会进行一些评估,并向用户显示一个消息框。我遇到的问题是,无论我使用什么开关,PowerShell 窗口仍然闪烁。 注意: 脚本本身运行良好。

这是我在任务计划程序中的内容:

powershell.exe -WindowStyle Hidden -executionpolicy bypass -noninteractive -encodedcommand "COMMAND"

我在这里缺少什么吗?

powershell scheduled-tasks
1个回答
0
投票
  • powershell.exe
    是 Windows console 子系统应用程序(与
    pwsh.exe
    、PowerShell(核心)CLI 一样)。

  • 因此,Windows 当前总是在启动时为其创建一个 - 最初可见 - 控制台窗口,并且只有之后 PowerShell 才能遵循

    -WindowStyle Hidden
    并隐藏窗口[1] - 这会导致你看到的闪烁。

    • 注意:可以通过使计划任务在与 Windows 服务运行的同一个不可见会话中运行(例如以 NT AUTHORITY\SYSTEM 身份运行或使用
      Run whether user is logged on or not
      选项运行)来从根本上
       不可见地运行计划任务,但是这样您就不会能够与用户的桌面进行交互,这就是您的意图。
  • 这是一个长期存在的问题,在

    GitHub 问题 #3028 中进行了讨论。

    • 目前,唯一的

      解决方法是使用GUI子系统wrapper应用程序来启动powershell.exe

      隐藏 - 请参阅
      此答案的底部部分了解具体选项。

    • 但是,

      未来的 Windows 增强控制台分配策略将提供一个解决方案:控制台的有条件分配,这将允许应用程序根据运行时决定是否为自己分配控制台条件。
      我不清楚此功能何时可用(或者即使它保证会实现,但我预计它会实现)。

      • 由于使用此功能需要通过应用程序manifest选择加入,因此必须更新 PowerShell CLI 才能支持该功能。
      • 鉴于 Windows PowerShell 不再积极维护,与 PowerShell (Core) 7+ 不同,只有后者的 CLI
        pwsh.exe
        可能会更新。

[1] 如果 Windows Terminal 是默认终端应用程序,则生成的窗口当前仅为 最小化,这是有问题的 - 请参阅 WT GitHub 问题 #12464

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