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

资源中心博客

PowerShell 是什么?功能与用途的完整指南

PowerShell 是什么?功能与用途的完整指南

Aug 25, 2025

PowerShell 是微软基于 .NET 构建的跨平台自动化框架和脚本语言。它从仅支持 Windows 的起源发展为适用于 Windows、macOS 和 Linux 的开源工具。PowerShell 使用 cmdlet、模块、管道以及基于对象的输出,实现强大的自动化。IT 团队借助 PowerShell 进行系统配置、云端管理、DevOps 管道以及安全策略执行,因此它已成为现代 IT 运维的核心平台。

PowerShell 入门

PowerShell 是 Microsoft 开发的命令行 Shell 和脚本语言。原始版本 Windows PowerShell 仅在 Windows 上运行,且目前不再进行积极开发;它只提供错误修复和安全更新。现代版本简称为 PowerShell。它基于 .NET 框架,属于开源项目,并支持多种平台,包括 Windows、macOS 和 Linux。

以下是该产品演进的概述:

  • 2006 年:Windows PowerShell 发布。
  • 2009 年:Windows PowerShell 2.0 引入了远程功能。
  • 2012 年:Windows PowerShell 3.0 提升了性能,并增加了新的语言特性。
  • 2016:Microsoft 将 PowerShell 开源,并使其成为跨平台工具。
  • 2018:PowerShell Core 6.0 发布,标志着向跨平台工具的过渡。
  • 2020:PowerShell 7.0 发布,目标是同时替代 Windows PowerShell 和 PowerShell Core。

PowerShell 的核心功能

PowerShell 使用 cmdlets(发音为“command-lets”),它们是专门的 .NET 类,用于实现特定操作。它支持变量、循环和函数,以及诸如错误处理和参数校验等高级脚本功能。

与生成文本输出的传统 Shell 不同,PowerShell 命令会生成结构化的数据对象。这种面向对象的架构使得数据的操作与分析成为可能。例如,可以直接访问对象的属性和方法;并且在使用管道(pipes)在命令之间传递对象时,会保留数据类型。

PowerShell 与 .NET 的深度集成还使你能够:

  • 在脚本中直接使用任意 .NET 类
  • 创建并使用自定义的 .NET 对象
  • 与 COM 对象、WMI 以及其他 Windows 技术进行交互
  • 无缝使用 .NET API 和函数

PowerShell 的实际用途

那么,Windows PowerShell 用来做什么呢?以下是一些最常见的应用场景。

自动化管理任务

PowerShell 可用于自动化许多 IT 管理员每天都需要完成的琐碎手动任务。例如:

  • 用户管理
  • 计划系统更新和备份
  • 文件和文件夹操作
  • 管理防火墙规则和安全策略
  • 软件安装与更新

管理系统配置

PowerShell 让你可以轻松地在多台计算机上同时配置系统设置、管理服务并控制网络配置。使用 PowerShell,Windows 管理员还可以创建并修改 组策略对象(GPO),并在多台计算机上应用注册表更改。

使用云服务(Azure、AWS 和 Google Cloud)

PowerShell 的功能不局限于本地设备和服务器。PowerShell 可通过 Azure PowerShell、AWS Tools for PowerShell 以及 Google Cloud SDK 等专用模块提供支持。这使你能够进行资源预配、自动化云端工作流、监控云基础设施等更多操作。

关键概念与术语

Cmdlets

Cmdlets 是 PowerShell 中的核心命令类型。它们遵循“动词-名词”的命名约定:动词用于指定诸如 Get、Set 或 Remove 之类的操作,而名词用于指定操作对象,例如 Process、Service 或 Item。比如:

  • Get-Process 用于检索正在运行的进程信息。
  • Set-Variable 用于为变量分配一个值。
  • New-Item 用于创建一个新文件或新目录。

PowerShell 提供程序

PowerShell 提供程序提供了一种方式,可以像访问文件系统一样访问和管理文件系统、注册表以及证书存储等数据存储。它使用熟悉的 cmdlet,例如 Get-ChildItemSet-Item

PowerShell 模块

模块是包含 PowerShell cmdlet、函数、工作流以及其他资源的包。它们会为特定任务或平台(例如 Active Directory 管理或 Azure 资源管理)扩展 PowerShell 的功能。你可以使用 Import-Module cmdlet 轻松导入。

管道(Pipelines)

管道(pipeline)是 PowerShell 中一项强大的功能,可让一个命令的输出用作另一个命令的输入。你使用管道符号 (|) 在命令之间传递对象。比如,下面的命令会获取所有进程,筛选出 CPU 使用率超过 10% 的进程,按 CPU 使用率排序并选择前 5 个:

      Get-Process | Where-Object { $_.CPU -gt 10 } | Sort-Object CPU -Descending | Select-Object -First 5
      

数据格式

PowerShell 让你能够轻松处理 JSON、XML 和 CSV 等数据格式,因此可以导入、导出并操作结构化数据。这使得 PowerShell 非常适合用于 API 集成、处理配置文件以及处理信息表格。

PowerShell 入门

在 Windows、macOS 或 Linux 上安装 PowerShell

Windows

Windows PowerShell 5.1 已预装在 Windows 10 及更高版本中。如需 PowerShell 7+,可以从官方 GitHub 仓库下载;或者,也可以使用随 Windows 11 及较新的 Windows 10 版本捆绑的命令行工具 WinGet 进行安装,如下所示:

      winget install Microsoft.PowerShell
      

macOS

要在 macOS 上安装 PowerShell,请按此处所示使用 Homebrew:

      brew install --cask powershell
      

Linux

要在 Linux 上安装 PowerShell,请使用 apt(用于 Debian/Ubuntu)或 yum(用于 RHEL/CentOS)等包管理器。

搭建您的第一个 PowerShell 环境

要设置您的 PowerShell 环境,请执行以下步骤:

  1. 打开 PowerShell。在 Windows 上,你可以在“开始”菜单中找到它。在 macOS 或 Linux 上,输入命令 pwsh.
  2. 通过输入以下内容来检查你的 PowerShell 版本:
      $PSVersionTable
      
  • 通过输入以下内容,强制启用最新的模块管理功能:
      Install-Module PowerShellGet -Force
      

学习基础:语法、别名和 Tab 自动补全

如前所述,Microsoft PowerShell cmdlet 使用动词-名词结构(例如 Get-Process、Set-Location)。然而,在许多情况下,你不必输入完整的 cmdlet 名称;相反,你可以输入一个简短的别名。要查看你当前 PowerShell 会话中可用的别名,请使用 Get-Alias cmdlet。下面是一些别名示例:

  • cat = Get-Content
  • cd = Set-Location
  • cls = Clear-Host

此外,PowerShell 还有制表符补全功能——只需按下 Tab 键,即可自动补全命令、参数和文件路径。

PowerShell Integrated Scripting Environment (ISE) vs. Visual Studio Code

Microsoft 为开发 PowerShell 脚本提供了多种环境。PowerShell ISE 是一个内置的 Windows 脚本开发工具,具有语法高亮和基础调试功能。Visual Studio Code 提供了更强大的跨平台编辑环境,具备先进的 PowerShell 脚本编写能力、广泛的插件支持以及与版本控制的集成。

尽管 PowerShell ISE 足以完成简单任务,但专业脚本编写者通常更偏好 Visual Studio Code 的灵活性以及全面的功能。

高级 PowerShell 功能

Desired State Configuration (DSC):配置即代码

Desired State Configuration (DSC) 是一种 PowerShell 功能,可通过声明式文件来管理系统配置。它会自动纠正配置偏差,帮助管理员在大型环境中保持一致的设置,并防止安全漏洞。

使用 PowerShell Remoting 进行远程管理

你可以在远程系统上执行 PowerShell 命令,以集中管理一整批机器。你可以连接到单台远程机器,或同时连接多台机器。

在 CI/CD 流水线中使用 PowerShell

由于具备多功能性和强大能力,PowerShell 在持续集成与持续部署(CI/CD)流水线中被广泛使用。PowerShell 脚本有助于简化软件交付流程、提升一致性并减少部署错误。主要应用包括:

  • 自动化构建流程
  • 运行测试并生成报告
  • 部署应用程序和基础设施

脚本中的错误处理与调试

PowerShell 提供了错误处理和调试 cmdlet,例如:

  • Set-PSBreakpoint 用于设置断点
  • Step-IntoStep-Over 用于逐行执行
  • $Error 用于跟踪错误详情的变量

此外,-ErrorAction 参数使管理员能够指定脚本错误的处理方式,并且 try-catch-finally 代码块提供全面的异常管理以及从容的错误恢复。

PowerShell 实战

管理 Windows 和 Linux 系统

PowerShell 现已成为跨平台自动化工具,同时仍可与 Windows 系统进行深度集成。管理员可以从一台工作站使用 PowerShell 来管理操作系统的许多方面。它还可用于与 Linux 系统上的文件、进程和服务进行交互。

配置网络设置与安全

管理员通常使用 PowerShell 来配置并保障网络环境的安全。主要功能包括:

  • 网络配置 — 自动化 IP 设置、DNS 配置、路由表以及 VLAN 设置。
  • 防火墙和安全策略 — 管理 Windows Defender 防火墙规则、安全基线以及访问控制列表(ACL)。
  • 网络诊断 — 使用诸如 Test-ConnectionTest-NetConnection 这样的 cmdlet,自动测试连接性、延迟和丢包。

使用 SQL Server Cmdlet 自动化数据库管理

PowerShell 的 SQL Server 模块可实现对 SQL Server 环境的全面管理,包括以下内容:

  • 数据库维护 — 自动化备份、还原和一致性检查。
  • 查询自动化 — 运行 T-SQL 脚本、导出/导入数据并监控数据库性能。
  • 用户管理 — 管理登录、权限和安全角色。

探索第三方集成:VMWare、AWS 和 Docker

PowerShell 现在可与多个第三方平台集成。以下是一些示例:

  • VMware vSphere — 使用 PowerCLI 自动化 VM 部署、快照管理以及资源监控。
  • Amazon Web Services (AWS) — 使用适用于 PowerShell 的 AWS Tools 模块,为 EC2 实例、S3 存储桶、IAM 策略等编写脚本。
  • Docker — 使用 PowerShell Docker 模块管理容器镜像、部署和网络配置。

面向开发者的 PowerShell

创建和使用自定义 Cmdlet

自定义 cmdlet 允许开发者将 PowerShell 的功能扩展到满足特定需求。你可以定义一个 cmdlet 类来处理独特的业务逻辑或重复性的编码任务。

构建模块以实现可重用性

模块会将 PowerShell 的函数、cmdlet 和脚本打包成可随时使用的可重用库。设计良好的模块能够改善代码组织,并使多个项目和团队之间共享通用功能成为可能。

与 GitHub 和版本控制的集成

在管理 PowerShell 脚本和模块时,版本控制非常重要;而通过与 GitHub 集成,可以通过提供一套全面的工具来增强这一流程,例如用于跟踪变更、管理不同版本以及维护 PowerShell 项目的历史记录。

用于应用程序部署的脚本

使用 PowerShell 在本地和云端自动化复杂的应用程序部署。通过创建并使用安装脚本,你可以减少人工错误、加快部署周期,并确保环境保持一致。

社区与资源

官方 PowerShell 文档与教程

Microsoft 的 PowerShell 文档是学习并精通 PowerShell 的权威资源。它提供了大量信息,例如:

  • 入门指南
  • Cmdlet 参考
  • 脚本教程
  • 最佳实践和风格指南

活跃的社区论坛:Reddit、Discord 和 GitHub

庞大的 PowerShell 社区提供了围绕无数主题的积极讨论。三个受欢迎的在线社区是:

  • Reddit — 借助庞大的订阅用户群,Reddit 是初学者和有经验的用户分享脚本、提问并讨论最佳实践的理想场所。
  • Discord — PowerShell 的 Discord 服务器汇聚了数千名用户,他们参与实时聊天与协作。它提供专门的频道用于获取帮助、发布新闻,甚至还有按语言划分的讨论。
  • GitHub — 这个中心化的仓库是一个平台,您可以在这里为开源 PowerShell 项目做贡献、审阅代码,并与全球开发者社区协作。

编写与共享脚本的最佳实践

随着您使用 PowerShell 的规模不断扩大,遵循最佳实践将有助于编写出清晰、高效且安全的代码,并确保其能有效支持协作。以下是一些关键建议:

  • 使用具有描述性的变量和函数名称。
  • 实现适当的错误处理和日志记录。
  • 在脚本中使用一致的格式和缩进。
  • 为提高可读性,请避免在脚本中使用别名(alias)。

适用于预构建解决方案的 PowerShell Gallery

PowerShell Gallery 是一个包含已测试并不断完善的模块和脚本的仓库。然而,在部署任何共享代码之前,您应验证其来源,并从安全性与合规性角度进行审查。

PowerShell 的未来

PowerShell 7+ 中的最新更新与功能

自诞生以来,PowerShell 已走过漫长的道路:它从以 Windows 为中心的工具,发展为强大的跨平台自动化解决方案。2020 年 3 月发布的 PowerShell 7,标志着这一演进中的重要里程碑。它基于 .NET Core 构建,带来了跨平台兼容性以及性能改进。其功能包括用于并发处理的并行执行、更完善的错误处理,以及对 Linux 和 macOS 的全面支持。

PowerShell 作为跨平台标准

PowerShell 转向跨平台工具,为 PowerShell 用户带来了若干关键优势,包括:

  • 在 Windows、macOS 和 Linux 上保持一致的语法
  • 能够从任何平台管理云资源
  • 在 DevOps 实践和 CI/CD 管道中的采用正在不断增长

自动化与配置管理趋势预测

未来几乎可以肯定会看到 PowerShell 与 AI 和机器学习的集成。该集成将推动更智能的自动化、由 AI 驱动的决策、预测分析以及自我修复脚本。

我们还可以期待与 Terraform 和 Ansible 等工具进行集成,从而实现混合的声明式-命令式自动化策略。另一个相对稳妥的判断是,会有更新来提供增强的安全功能,以应对当代网络安全方面的担忧。

结论

如果你还是一名尚未使用 PowerShell 的 IT 专业人员,不妨试试看——你会很快发现它是一款必不可少的工具。借助其跨平台能力,并与云端与本地系统深度集成,PowerShell 使 IT 团队能够轻松简化运维流程、增强安全性,并自动化复杂任务。

常见问题

PowerShell 用于做什么?

PowerShell 是用于自动化和系统管理的命令行 Shell 以及脚本平台。IT 专业人员使用它来管理例如:

  • 系统配置与维护
  • 例如 Azure 和 AWS 之类的云基础设施
  • 网络设置
  • 应用程序部署
  • 数据处理与报告
  • 安全与合规任务

PowerShell 和 Python 是一样的吗?

不是。尽管两者都是脚本语言,PowerShell 旨在用于 Windows 和云基础设施的系统管理与自动化。Python 是一种通用编程语言,常用于 Web 开发、数据科学、AI 以及软件开发。

如何运行 PowerShell?

在 Windows 上启动 PowerShell 的方法有多种,包括以下几种:

  • 按下 Win + R,输入 powershell ,然后按 Enter。
  • 在“开始”菜单中搜索 PowerShell,然后点击它。

PowerShell 好学吗?

是的,尤其是那些熟悉命令行工具或脚本编写的人。它直观的“动词-名词”语法(例如 Get-ProcessSet-Item)使 cmdlet 很容易理解。初学者可以从文件管理等基础任务开始,并逐步进阶到编写脚本,以自动化系统管理等工作。此外,完善的文档、教程以及活跃的社区让学习更为便捷。

禁用 Windows PowerShell 可以吗?

这个问题的答案可能取决于你问的是谁。许多安全专业人士建议,为不需要在工作中使用 PowerShell 的非技术用户禁用 PowerShell。然而,IT 人员可能需要 PowerShell 来进行系统维护和故障排除等工作。

如果你选择禁用 PowerShell,请务必谨慎操作,因为这可能会阻止重要的系统更新和管理任务正常运行。更好的做法可能是使用安全策略来控制 PowerShell 的执行和访问权限。

PowerShell 和 命令提示符 是同一个东西吗?

并不是。虽然两者都是命令行界面,但 PowerShell 要先进得多,具备脚本编写能力、自动化工具,以及访问 .NET 框架和 Windows API 的能力。此外,PowerShell 支持多平台,而命令提示符仅适用于 Windows。

分享到

了解更多

关于作者

Asset Not Found

Jonathan Blackwell

软件开发负责人

自 2012 年以来,工程师兼创新者 Jonathan Blackwell 一直提供工程领导力,使 Netwrix GroupID 成为 Active Directory 和 Azure AD 环境中群组与用户管理领域的领先者。他在研发、市场与销售方面的经验,使 Jonathan 能够全面理解 Identity 市场以及买家如何思考。