Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

如何运行 PowerShell 脚本

如何运行 PowerShell 脚本

Aug 25, 2025

PowerShell 脚本可在 Windows、Linux 和 macOS 上自动化管理任务,但出于安全考虑,默认情况下会限制脚本的执行。用户需要调整执行策略,启动 PowerShell 或 CMD,并指定脚本的完整路径或相对路径。脚本可以包含参数,也可以在提升的权限下运行,或使用 Invoke-Command在远程执行。最佳实践包括对脚本进行签名、使用最小权限、验证输入,并使用 Try-Catch 处理错误,以实现安全自动化。

PowerShell 是一种脚本语言和命令行外壳,用于任务自动化和配置管理,主要由系统管理员和高级用户使用。它基于 .NET 框架(PowerShell 7 使用 .Net Core),支持 Windows、Linux 和 macOS。它能够自动化管理任务,例如管理用户帐户、配置网络以及执行备份,从而降低人为错误。

尽管 PowerShell 简化了管理工作,但它也可能带来挑战,尤其是对初学者而言。常见问题包括语法错误、路径配置不当、依赖关系问题以及令人困惑的错误信息。此外,为了增强安全性,默认情况下会限制脚本执行,要求用户调整执行策略以运行脚本。为了在保持安全的同时最大化 PowerShell 的潜力,用户必须将对脚本的谨慎处理与故障排除能力结合起来。

为什么要使用 PowerShell 脚本?

PowerShell 脚本是 Windows 以及跨平台环境中系统管理员和开发人员不可或缺的工具。通过自动化诸如账户管理、网络监控和软件部署等流程,可以节省大量时间,让 IT 专业人员将精力投入到战略性工作、工作流优化和问题解决上,从而提高效率并推动创新。他们甚至可以为脚本安排定时,以实现自动执行。PowerShell Remoting 通过从集中式界面实现对多个系统的安全远程管理,进一步放大了 PowerShell 的价值,减少了对物理访问的需求,并提升对事件的响应速度。

使用 PowerShell 脚本还能确保对复杂操作进行一致且准确的执行。消除人为错误对于在合规与安全要求下维持统一的配置至关重要。这种可靠性在大规模环境中尤为宝贵,因为即使是很小的不一致也可能导致漏洞或运行故障。

理解 PowerShell 执行策略

PowerShell 使用 execution policies 来控制 PowerShell 脚本是否可以在系统上运行;如果可以,则在什么条件下运行。

执行策略设置

执行策略可以包含以下设置:

  • 受限:无法运行任何脚本;只能在 PowerShell 提示符中执行单个命令。尝试运行脚本会导致错误消息:“此系统中已禁用脚本运行。” 这是大多数系统的默认设置。
  • AllSigned: 只有由受信任的发布者签名的脚本才能运行。该设置能确保只执行已验证的脚本,从而提供较高的安全性。
  • RemoteSigned: 在本地创建的脚本可以在没有签名的情况下运行,但从互联网上下载的脚本必须由受信任的发布者签名。该策略通常建议用于日常使用。
  • 不受限制: 无论脚本的来源是什么,还是脚本是否已签名,都可以运行所有脚本。不过,当用户执行下载的脚本时,会收到警告,以提醒他们注意相关风险。

更改执行策略的方法Set-ExecutionPolicy

要修改执行策略,请使用 Set-ExecutionPolicy cmdlet。-Scope 参数用于定义作用范围:CurrentUser 仅适用于当前登录的用户,而 LocalMachine 适用于系统上的所有用户(使用此值需要管理员权限)。

下面是一个示例:

      Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
      

在提示时输入 Y(是)以确认更改。

使用 Get-ExecutionPolicy 检查执行策略

您可以使用以下命令检查当前的执行策略:

      Get-ExecutionPolicy -List
      

下面是示例输出:

Image

运行 PowerShell 脚本的分步指南

要从 PowerShell 运行 PowerShell 脚本,请按以下步骤操作:

步骤 1:启动 PowerShell

在运行脚本之前,你需要打开 PowerShell。以下是两种选择:

  • 单击“开始”菜单,输入 PowerShell ,然后选择 Windows PowerShell
a screenshot of the windows powershell app in the windows start menu .
  • 在“开始”菜单中输入 cmd ,启动命令提示符。输入 powershell 以打开 PowerShell 会话。
a command prompt window that says install the latest powershell for new features and improvements

步骤 2:导航到脚本的位置

接下来,通过运行 cd 命令导航到 .ps1 文件所在的目录:

      cd C:\Users\AbbeyCrawford\Scripts
      

步骤 3:运行脚本

运行 PowerShell 脚本的命令取决于你是否位于脚本所在的目录:

  • 如果你正在脚本所在的目录中,以下是在 PowerShell 中运行脚本的方法:
      .\HelloWorld.ps1
      
  • 如果你不在脚本所在的目录中,要运行 PowerShell 脚本,你必须提供其完整路径:
      C:\Users\JohnDoe\Scripts\HelloWorld.ps1
      
  • 如果脚本位于当前目录的子文件夹中,请使用 .\ 作为前缀来提供相对路径:
      .\SubFolder\HelloWorld.ps1
      
  • 路径前面的点号(.)表示你希望在当前会话中运行该脚本,以便其变量或函数在执行后仍可保持可用。(点号作用/点号引入将在本文后面更详细地说明。)请注意两个点之间的空格。
      . .\HellowWorld.ps1
      
      . C:\Scripts\MyScripts\HelloWorld.ps1
      

带参数运行脚本

许多 PowerShell 脚本都接受参数,以便更灵活。你在执行脚本时可以传递参数(arguments)。

例如,假设你有下面这个脚本,它接受两个参数:NameAge

      param(

    [string]$Name,

    [int]$Age

)

Write-Host "Hello, $Name! You are $Age years old."

When running the script, you can pass arguments to it as follows:

.\Get-UserInfo.ps1 -Name "John" -Age 30
      
a computer screen shows a command line that says hello john you are 30 years old .

如何从 CMD 运行 PowerShell 脚本

要从命令提示符执行 PowerShell 脚本,请按以下步骤操作:

  1. 在搜索栏中输入 cmd ,然后按下 Enter
  2. 使用以下命令运行你的 PowerShell 脚本。-File 选项是必需的;它用于指定要运行的脚本文件。
      powershell -File C:\Scripts\Get-UserInfo.ps1
      
a screenshot of a command prompt window on a computer .

使用 -NoExit 选项

在某些情况下,你可能希望在脚本执行完成后,PowerShell 窗口保持打开。对于调试来说,这尤其有用;当脚本被设计为在窗口关闭前显示你想要查看的输出时,也会很有帮助。

从命令提示符运行脚本时,要保持 PowerShell 窗口打开,请使用下面所示的 -NoExit 选项:

      powershell -NoExit -File C:\Scripts\Backup.ps1
      

如何以管理员身份运行 PowerShell

许多管理任务需要提升权限才能成功执行。例如:安装软件、修改网络设置以及访问系统目录。如果在没有管理员权限的情况下尝试执行这些任务,可能会导致错误,从而阻碍重要的维护或配置任务。

要以管理员权限运行 PowerShell,请右键单击 Windows PowerShell ,然后选择 Run as Administrator

使用 Start-Process 进行管理员级执行

在某些情况下,你需要在 PowerShell 会话中运行另一个实例的 PowerShell 或脚本。Start-Process cmdlet 是一个完美的工具。添加 -Verb RunAs 参数会指示 PowerShell 以管理员权限启动一个新的实例:

      Start-Process PowerShell -Verb RunAs
      
a screenshot of a command line window and a windows powershell window .

要以更高权限执行特定脚本,请添加 -ArgumentList 参数,并使用 -File 来指定脚本的路径。下面是两个示例:

      Start-Process PowerShell -ArgumentList '-File "C:\Scripts\Update-Software.ps1"' -Verb RunAs
      
      Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File “ C:\Scripts\Update-Software.ps1” -Verb RunAs
      

常见错误及其修复方法

排查错误一开始可能会让人感到望而生畏,但成功解决它们是一个重要的进步,就像因调试技能而获得金、银、铜徽章一样。下面是一些最常见的问题以及如何有效解决它们。

“已禁用脚本运行”错误

此错误发生是因为 PowerShell 的默认执行策略设置为 Restricted,从而阻止任何脚本运行。例如,下面的截图显示了错误:“无法加载文件 C:\Scripts\Get-UserInfo.ps1,因为此系统已禁用脚本运行”:

Image

要解决此问题,请修改执行策略以允许脚本执行。使用 Set-ExecutionPolicy 将其更改为更宽松的设置,例如 RemoteSigned

语法错误

语法错误通常源于命令结构不正确、缺少参数或拼写错误。下面是一个示例:

a screenshot of a command line window that says start process powershell

要修复语法错误,请仔细阅读显示的错误信息,并查看所提示的行号以确定错误发生的位置。为防止错误,请始终再次核对脚本中是否存在常见失误,并考虑使用提供语法高亮或 IntelliSense 功能的代码编辑器。

权限错误

权限错误发生在脚本尝试访问需要更高权限的资源时,或当文件/文件夹权限不足时。例如,下面的错误表示对路径 C:\Backup\Backup.txt 的访问被拒绝:

Image

以下是解决该问题的两种方法:

  • 右键单击 PowerShell,选择 以管理员身份运行,然后再次执行你的脚本。
  • 检查脚本正在访问的文件或文件夹的权限,并使用 Get-AclSet-Acl cmdlet 授予必要的权限。

面向初学者的 Windows PowerShell 脚本教程(PDF)

了解更多

在不同环境中运行 PowerShell 脚本

运行 PowerShell 脚本的流程会因你是在哪种情况下运行而有所不同:

  • 在 PowerShell 集成脚本环境(ISE)中
  • 通过文件资源管理器
  • 之类的命令进行远程操作Invoke-Command

在 PowerShell ISE 中运行脚本

PowerShell ISE 是一种用户友好的开发环境,旨在用于编写、测试和调试 PowerShell 脚本。它提供多窗格界面,并具备语法高亮等功能以及内置调试工具。要在 PowerShell ISE 中运行脚本,请执行以下步骤:

  1. 打开 PowerShell ISE。要找到它,你可以在“开始”菜单中搜索 PowerShell ISE,或在 powershell_ise 中输入 Run 对话框(Windows + R)。下面是得到的界面:
a screenshot of a windows powershell window showing a list of commands .
  • 使用脚本窗格(顶部窗口)来编写或加载脚本。要创建新的 .ps1 文件,请按 FileèNew。要保存脚本,请单击 File > Save As
  • 要运行整个脚本,请单击 Run Script 按钮(绿色三角形)或按 F5。要运行所选行,请先高亮选中它们,然后按 F8。
Image

从文件资源管理器运行脚本

执行 PowerShell 脚本的另一种便捷方法是直接从文件资源管理器中运行。该方式在你希望在不必打开终端窗口的情况下执行脚本,或需要快速访问时非常有用。

  1. 导航到包含你的 PowerShell 脚本的文件夹。
  2. .ps1 脚本文件上右键单击。在上下文菜单中选择 Run with PowerShell。这会在新的 PowerShell 窗口中启动脚本并立即执行。
Image

远程运行脚本

PowerShell 还提供了无需物理访问即可在远程计算机上运行脚本的能力。在企业环境中,当需要在多台服务器上执行任务时,这尤其有用。

先决条件:启用远程执行

在远程执行脚本之前,必须在目标系统上启用 PowerShell Remoting。请运行以下命令:

      Enable-PSRemoting -Force
      
Invoke-Command 的基本语法 Invoke-Command

Invoke-Command 允许你在远程计算机上执行 cmdlet 或脚本。例如,要在名为 UpdateSystem.ps1 的远程计算机上运行 Server01 ,请使用以下 cmdlet:

      Invoke-Command -ComputerName Server01 -FilePath C:\Scripts\UpdateSystem.ps1
      
提供要执行的脚本块(Script Block)

若要直接执行脚本块,请使用以下语法:

      Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process }
      
在多台计算机上运行命令

要在多台计算机上运行脚本,可以按照下面所示,使用变量指定计算机名称:

      $computers = "PC1", "PC2", "PC3"

Invoke-Command -ComputerName $computers -ScriptBlock { Your PowerShell Commands }
      

或者,你也可以将计算机名称以逗号分隔的列表形式传入:

      Invoke-Command -ComputerName Server01, Server02 -ScriptBlock { Restart-Service -Name Spooler }
      

使用任务计划程序自动化 PowerShell 脚本

Windows 任务计划程序是内置于 Windows 操作系统中的工具,可让用户安排任务在特定日期和时间运行、按预定义的计划运行,或在特定事件触发时运行。

如需了解为 PowerShell 脚本安排计划的好处,并获取详细说明、示例、最佳实践以及故障排除提示,请参阅本文:How to Automate PowerShell Scripts with Task Scheduler。

高级技术

PowerShell 提供高级技术,用于提升脚本的可复用性、模块化,以及在不同脚本之间共享变量和函数。两个关键概念是点源(dot sourcing)和脚本模块(script modules)。

点源(Dot Sourcing)

通常,每个脚本都会在一个新的会话中运行,并且在脚本内声明的任何变量或函数在脚本结束时都会丢失。使用点源(dot sourcing)时,脚本会在当前作用域中执行,因此在该脚本中定义的任何变量、函数或别名都可以在调用它的会话中使用。当你希望在不同脚本之间或同一会话内共享通用函数或变量时,这尤其有用。

语法如下:

      . .\ScriptName.ps1
      

第一个点后面跟一个空格(. )表示给 PowerShell:你正在对脚本进行点源(dot sourcing)。

第二部分(.\ScriptName.ps1)是指向你的脚本的相对路径。

使用脚本模块

PowerShell 中的模块是一种包含 PowerShell 函数、cmdlet、变量等内容的包。模块旨在被导入,并在多个脚本中使用。与点源(dot sourcing)相比,模块提供更好的封装和版本管理,使得组织、维护和共享可复用脚本更容易。

要创建脚本模块,只需将脚本保存为 .psm1 文件扩展名,而不是 .ps1

创建模块后,可以使用以下方式将该模块的功能在 PowerShell 会话中启用:Import-Module 如下所示:

      Import-Module C:\Scripts\Modules\Geometry.psm1
      

运行 PowerShell 脚本的最佳实践

以下最佳实践对于在运行 PowerShell 脚本时保持安全性至关重要,同时也能提升脚本的可用性与准确性。

安全最佳实践

使用强安全的执行策略设置

使用 PowerShell 的执行策略,仅允许来自受信任且已验证的来源的脚本。将执行策略设置为适合您环境的级别。对大多数组织来说,RemoteSigned提供了良好的平衡:允许运行本地创建的脚本,同时要求下载的脚本必须由受信任的发布者进行签名。

为脚本添加数字签名

PowerShell 会在运行脚本之前检查其数字签名。使用受信任的证书对脚本进行数字签名,有助于防止被篡改。

使用所需的最小权限运行脚本

在可能的情况下,以最小权限运行脚本,以在出现安全漏洞或错误时限制潜在损害。

文档最佳实践

文档完善的脚本更易于维护、调试和理解,适用于当前用户和未来用户。

使用注释

注释对于说明脚本的目的、参数和逻辑非常重要。在 PowerShell 中,注释以 # 符号开头。

如需进行简要说明,请使用行内注释:

      $backupDirectory = "D:\Backup"  # Set the backup directory
      

要提供更详细的说明,或暂时禁用代码的部分内容,请使用块注释(<# … #>):

      <#
      

该脚本会备份关键数据。

它会检查可用空间,并验证备份的完整性。

      #>
      

查看帮助

为确保您正确使用 PowerShell 函数,请使用 Get-Help 来查看 cmdlet 的语法和用法。例如,要获取 Get-Process 的帮助,请运行以下命令:

      Get-Help Get-Process
      

错误处理最佳实践

恰当的错误处理对于防止 PowerShell 脚本意外失败至关重要,否则可能导致任务未完成或系统处于不稳定状态。

验证输入

为避免出现意外错误,请确保脚本会对输入进行验证。对于诸如姓名或用户头像之类的用户相关数据,这一点尤其重要。

实现 Try-Catch 代码块

try-catch 块是 PowerShell 中处理错误的主要方法。这使您能够从容地捕获并处理异常。下面是一个示例:

      try {

       # Attempt to run a command

       Copy-Item -Path $source -Destination $destination -Recurse

   } catch {

       # Handle the error

       Write-Host "An error occurred: $_"

       # Additional error recovery actions can be performed here

   }
      

使用 Finally

在必要时添加 final 块。无论 try 块中是否发生错误,该块都会运行,从而让您清理资源或执行最终处理代码。下面是一个示例:

      try {

       # Code that may throw an exception

       Remove-Item -Path $filePath -ErrorAction Stop

   } catch {

       Write-Host "Failed to remove the file: $_"

   } finally {

       Write-Host "Cleanup actions have been performed."

   }
      

结论

PowerShell 是一款极其强大的工具,可用于自动化系统管理任务,以确保准确性并提升效率。通过理解诸如执行策略、点源(dot sourcing)和脚本模块(script modules)等核心概念,并遵循安全性与错误处理方面的最佳实践,您就能充分利用 PowerShell,编写健壮、可复用且安全的脚本,从而改善日常运维。

我们鼓励您从编写并运行自己的脚本开始使用 PowerShell 进行实验。先从简单的自动化任务入手,然后逐步深入学习更高级的脚本编写技术。练习得越多,您在自动化复杂工作流、管理远程系统以及处理更大规模的 IT 运维方面就会越熟练。

Netwrix Directory Manager

常见问题(FAQs)

分享到

了解更多

关于作者

Tyler reese

Tyler Reese

产品管理副总裁,CISSP

凭借在软件安全行业超过二十年的经验,Tyler Reese 对当今企业面临的快速演变的身份与安全挑战非常熟悉。目前,他担任 Netwrix Identity and Access Management 组合的产品总监;他的职责包括评估市场趋势、确定 IAM 产品线的发展方向,并最终满足终端用户的需求。他的职业经历从为财富 500 强公司提供 IAM 咨询,到在一家大型直销面向消费者(direct-to-consumer)的公司担任企业架构师,涵盖范围十分广泛。 目前,他持有 CISSP 认证。