如何在不显示窗口的情况下运行 PowerShell 脚本

  1. 使用 PowerShell 的 -WindowStyle Hidden 参数无窗口显示运行 PowerShell 脚本
  2. 使用任务调度程序在无窗口显示的情况下运行 PowerShell 脚本
  3. 使用第三方工具在无窗口显示的情况下运行 PowerShell 脚本
  4. 结论
如何在不显示窗口的情况下运行 PowerShell 脚本

PowerShell 是微软的一种工具,默认随 Windows 操作系统提供,启用 Windows 用户基于命令行界面和命令的自动化功能。

PowerShell 是一种脚本工具和自动化工具;因此,有时需要应用程序在后台静默运行。在本文中,我们将看到如何在后台静默运行 PowerShell 应用程序,执行后台命令。

有第三方工具可以与 PowerShell 工具结合使用,以实现 PowerShell 的隐藏功能。尽管,使用 PowerShell 本身也有简单的方法来做到这一点。

使用 PowerShell 的 -WindowStyle Hidden 参数无窗口显示运行 PowerShell 脚本

一种简单的隐藏脚本窗口的方法是使用 hidden 类型作为窗口样式。窗口样式的 PowerShell 窗口会在开始时短暂显示,然后在脚本执行期间隐藏。

PowerShell 中的 -WindowStyle 参数允许您控制 PowerShell 窗口的外观。应用 -WindowStyle Hidden 参数时,确保在脚本执行期间不显示 PowerShell 窗口。

这在需要自动化而不需要用户交互的任务中或当您不想打断用户工作流程时特别有用。

使用 -WindowStyle Hidden 参数执行 PowerShell 脚本非常简单。打开一个 PowerShell 窗口,并使用以下命令:

PowerShell.exe -WindowStyle Hidden { Script you want to execute.. }

命令的每个部分的作用如下:

  • PowerShell.exe:启动新的 PowerShell 进程。
  • -WindowStyle Hidden:将窗口样式设置为隐藏,防止 PowerShell 窗口显示。
  • 您要执行的脚本用花括号 {} 包围。

上面的命令的 PowerShell 执行如下图所示。

PowerShell 执行

输入后,窗口消失,但应用程序将在后台运行。如下面的后台进程图所示,PowerShell 作为后台进程运行。

后台进程

在这种方法中,用户最初会看到 PowerShell。因此,它并没有真正对终端用户隐藏。即使任务之前已经安排,窗口也会弹出并迅速隐藏。

使用批处理文件

如果您正在处理更复杂的脚本或计划多次运行它,这种方法(与 PowerShell 命令的批处理文件)可能会更有条理和高效。

创建一个批处理文件(例如 run_script.bat),其内容如下:

@echo off
powershell -WindowStyle Hidden -File "C:\path\to\script.ps1"
  • @echo off:此命令防止批处理文件在控制台窗口中显示其命令。
  • powershell -WindowStyle Hidden -File "C:\path\to\script.ps1":这一行调用 PowerShell,带有必要的参数和脚本路径。

以上两个代码实现相同的目标,即在不显示窗口的情况下运行 PowerShell 脚本,但它们使用稍微不同的方法。然而,还有其他简单的方法来实现 PowerShell 的真正隐藏功能。

使用任务调度程序在无窗口显示的情况下运行 PowerShell 脚本

任务调度程序是一个 Windows 工具,允许您在特定时间或事件自动化任务。它提供了广泛的自定义选项,使其成为管理计算机上各种任务的多功能工具。

创建新任务

  1. 打开任务调度程序:您可以通过在 Windows 开始菜单中搜索 "Task Scheduler" 来做到这一点。
  2. 导航至 "Actions":点击右侧窗格中的 "Create Task"

配置任务

  1. 命名任务:为您的任务提供名称和描述。这应该是描述性的,反映任务的功能。
  2. 选择任务触发器:选择您希望如何触发任务。选项包括每日、每周、每月、登录时等。选择最符合您需要的触发器。

设置触发器

  1. 选择触发器详细信息:根据您选择的触发器,您需要提供额外的详细信息。例如,如果您选择 "Daily",您需要指定时间和频率。
  2. 高级设置:您可以通过点击 "Advanced settings" 设置更高级的选项。这允许您进一步自定义任务运行的时间和频率。

指定操作

  1. 选择操作:在 "Actions" 步骤中,选择 "New" > "Start a program",因为我们将运行一个 PowerShell 脚本。
  2. 程序/脚本:浏览并选择您系统上的 powershell.exe
  3. 添加参数(可选):输入以下内容:
-WindowStyle Hidden -File "C:\path\to\script.ps1"

"C:\path\to\your\script.ps1" 替换为您的 PowerShell 脚本的实际路径。

开始一个程序

启用安全选项

选中框以确保 "Run with highest privileges"。这确保脚本在需要时以管理员权限运行。

您还可以点击 Run whether user is logged on or not,在任务运行时将永远不显示 PowerShell 窗口。

任务调度器

完成和测试任务

查看任务摘要,并单击 "OK" 创建它。

您可以通过在任务调度程序中右键单击任务并选择 "Run" 测试任务。这将根据您设置的触发器立即执行任务。

任务调度程序允许您在指定的时间间隔或事件中自动化任务。通过使用它触发 PowerShell 并使用适当的参数,您可以静默运行脚本。

但是,这种方法可能会影响您试图使用的一些脚本的功能。因此,您还可以使用第三方工具或社区扩展来为 PowerShell 提供支持。

使用第三方工具在无窗口显示的情况下运行 PowerShell 脚本

第三方工具通过提供额外的功能扩展 PowerShell 的能力。在运行 PowerShell 脚本而不显示窗口时,这些工具在无缝自动化任务中发挥着关键作用。

使用 PSExec

PSExec 是来自 Sysinternals(现在是微软的一部分)的一种多功能工具,允许您远程执行进程。它可以用于静默运行 PowerShell 脚本。

psexec -d -s powershell -WindowStyle Hidden -File "C:\path\to\script.ps1"
  • psexec:启动 PSExec
  • -d:指示 PSExec 不等待命令完成。
  • -s:以系统权限运行命令。
  • powershell -WindowStyle Hidden -File "C:\path\to\script.ps1":静默执行 PowerShell 脚本。

使用 NSSM (Non-Sucking Service Manager)

NSSM 是一个 Windows 服务管理器,允许您将任何应用程序作为服务运行。这对于在后台静默运行脚本尤其有用。

  1. 官方网站下载并安装 NSSM。
  2. 打开一个具有管理权限的命令提示符。
  3. 运行以下命令以创建一个新服务:
nssm install <ServiceName> "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\path\to\script.ps1"
  • nssm install <ServiceName>:使用指定名称安装一个新服务。
  • "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe":指定 PowerShell 可执行文件的路径。
  • "-NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\path\to\script.ps1":传递参数到 PowerShell,指示其静默运行脚本。

结论

PowerShell 是一个强大的 Windows 用户自动化工具,提供广泛的命令行能力。在需要静默后台执行的场景中,有多种方法可供使用。

  • 使用 -WindowStyle Hidden 参数:这允许在脚本执行期间,PowerShell 窗口短暂可见,然后隐藏。适合于需要自动化而不进行用户交互的任务。
  • 批处理文件:适合于运行复杂或重复的脚本。批处理文件使用必要的参数调用 PowerShell。
  • 任务调度程序:提供特定时间或事件的自动化。通过配置它以合适的参数运行 PowerShell,脚本可以静默执行。
  • 第三方工具(例如 PSExecNSSM):扩展 PowerShell 的能力,启用无窗口的脚本执行。

选择最适合您具体需求和工作流程的方法。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.