【问题标题】:PowerShell in Task Manager Shows Window任务管理器中的 PowerShell 显示窗口
【发布时间】:2018-06-22 15:12:48
【问题描述】:

我正在尝试制作任务计划任务,因此 PowerShell 脚本正在运行是完全不可见的,因此我在我的 Win10 机器上创建了一个任务,配置如下:

程序/脚本:

powershell.exe

添加参数(可选):

-WindowStyle Hidden -command "& {Out-File 'C:\temp\somefile.txt'}" -NonInteractive -NoLogo -NoProfile

当我运行此任务时,powershell 命令窗口会弹出一瞬间,这是我不想要的。

【问题讨论】:

  • 这似乎是一个已知问题? github.com/PowerShell/PowerShell/issues/3028
  • 在上面的评论中,一位用户建议启动进程:到目前为止,我一直在使用一个名为 PS 的快捷方式,目标为:C:\Windows\System32\WindowsPowerShell\v1.0 \powershell.exe 和选项 Run: Minimized 像这样: C:\Windows\PS Start-Process 。任务栏确实闪烁,但没有更多控制台。

标签: powershell scheduled-tasks


【解决方案1】:

您可以使用“应用程序主机”类型的包装器来解决这个问题。这是 PowerShell 作为基于控制台的主机时的一个已知问题。

我发现最方便的方法是使用 WScript.exe 并运行 VBS 脚本,该脚本将“不可见”地调用进程,没有控制台或任务栏闪烁。

VBS 代码:

On Error Resume Next

ReDim args(WScript.Arguments.Count-1)

For i = 0 To WScript.Arguments.Count-1
    If InStr(WScript.Arguments(i), " ") > 0 Then
        args(i) = Chr(34) & WScript.Arguments(i) & Chr(34)
    Else
        args(i) = WScript.Arguments(i)
        End If

Next

CreateObject("WScript.Shell").Run Join(args, " "), 0, False

将上述代码保存在扩展名为“.vbs”的文件中,并将其放在运行任务的客户端可以运行的位置。这可能在网络上受保护的文件共享中(如果您希望它调用的脚本仅在连接到网络时运行),或者在客户端本地。

现在,当您调用基于控制台的脚本(PowerShell、BAT、CScript 等)时,您可以使用 WScript 显式调用此 VBS 脚本WScript.exe。抛出“批处理模式”参数//B 也是值得的,这将抑制脚本错误和提示 - 例如如果找不到包装文件本身。

此时,您只需将 powershell 和您希望 powershell 运行的命令传递到此启动序列:

 WScript.exe //B "\\Path\To\Launcher.VBS" powershell.exe -ExecutionPolicy ByPass -file "\\Powershell\Script\To\Run"

【讨论】:

  • 我一直在寻找解决方案一段时间,但您的解决方案是唯一适用于我的设置的解决方案!谢谢一堆。如果有人感兴趣,我使用@Adam 的答案运行以下命令:WScript.exe //B "W:\My Documents\invisiblelauncher.VBS" powershell.exe -NoLogo -NonInteractive -ExecutionPolicy AllSigned -WindowStyle Hidden -Command "(New-Object -ComObject Shell.Application).ToggleDesktop()" 这是“显示桌面”功能(与 Win+D 相同)。
猜你喜欢
  • 2016-05-04
  • 1970-01-01
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
相关资源
最近更新 更多