PowerShell 核心概念

PowerShell 不只是一个命令行工具,它的设计理念、功能架构和使用方式与传统 Shell 有着显著区别。


一、Cmdlet:最小命令单元

什么是 Cmdlet?

Cmdlet(发音为 C++ommand-let)是 PowerShell 中最基本的命令单元,它们都是基于 .NET 的类,运行后会返回一个或多个 .NET 对象。

命名规则:动词-名词

每个 Cmdlet 都遵循 动词-名词 命名规范,例如:

Cmdlet含义
Get-Process获取进程信息
Set-Item设置某个资源项的值
Remove-Item删除文件、注册表项等
New-User创建新用户(若安装了 AD 模块)

PowerShell 附带了数百个 Cmdlet,且第三方模块可以自定义更多。

示例

Get-ServiceGet-ChildItem -Path C:\Windows

你也可以使用 Get-Command 查看所有可用的 Cmdlet:

Get-Command -CommandType Cmdlet

二、对象管道(Object Pipeline)

和 UNIX/Linux 的管道有啥区别?

在传统 Shell 中,管道 (|) 传递的是文本字符串。而在 PowerShell 中,管道传递的是完整的 .NET 对象。

这就意味着你可以保留结构化数据(属性、方法)进行后续处理。

示例:按 CPU 使用率过滤进程

Get-Process | Where-Object { $_.CPU -gt 100 } | Select-Object Name, CPU

上述命令中:

  • Get-Process 获取所有进程(返回对象)

  • Where-Object 过滤 CPU 使用率大于 100 的进程

  • Select-Object 只输出 Name 和 CPU 字段

管道传值之美

你不需要使用 awkcutgrep 等工具去"解析"输出,而是直接操作对象属性。


三、Provider 和 PSDrive:资源驱动器抽象

PowerShell 提供了一种统一的资源访问方式:Provider 模型,它把各种资源映射为虚拟驱动器(PSDrive),就像 C: 盘一样操作。

常见 Provider 类型

Provider示例驱动器说明
FileSystemC:D:本地文件系统
RegistryHKLM:HKCU:Windows 注册表
EnvironmentEnv:环境变量
CertificateCert:证书存储
FunctionFunction:当前会话中的函数
VariableVariable:当前定义的变量
AliasAlias:命令别名

示例:操作注册表

Get-ChildItem HKLM:\Software\Microsoft

就像浏览文件夹一样浏览注册表。


四、脚本与模块:组织与复用

脚本(.ps1)

  • PowerShell 脚本是以 .ps1 为扩展名的文本文件

  • 包含一系列命令、流程控制、函数等

模块(.psm1 / .psd1)

模块是 PowerShell 中用于复用的功能单元,它可以是:

  • 一个 .psm1 文件(模块脚本)

  • 一个包含 .psd1 清单的文件夹(高级模块)

模块可支持:

  • 自动加载(当使用其中函数时自动加载)

  • 版本控制

  • 依赖声明

查看系统中所有模块:

Get-Module -ListAvailable

导入模块:

Import-Module Az

五、执行策略(Execution Policy)

为了防止恶意脚本执行,PowerShell 引入了 执行策略(Execution Policy),它限制 .ps1 脚本文件的执行行为。

常见策略类型

策略含义
Restricted默认,不允许运行任何脚本
RemoteSigned允许本地脚本运行,远程脚本需签名
AllSigned所有脚本都需签名
Bypass无限制,不建议在生产中使用

设置执行策略

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

⚠️ 注意:执行策略只影响脚本文件,不限制手动输入的命令。


六、远程管理(PowerShell Remoting)

PowerShell Remoting 支持通过 WS-MAN(基于 WinRM) 或 SSH 协议,远程连接到另一台计算机并执行命令。

启用 WinRM(Windows 上)

Enable-PSRemoting -Force

常用命令

# 建立远程会话Enter-PSSession -ComputerName Server01# 批量执行命令Invoke-Command -ComputerName Server01,Server02 -ScriptBlock { Get-Service }

支持 SSH 的跨平台远程

Enter-PSSession -HostName linux01 -User user1 -SSHTransport

七、Desired State Configuration(DSC)

DSC(Desired State Configuration)是 PowerShell 的声明式配置平台,用于定义系统的"理想状态"。

它允许你:

  • 用配置脚本定义资源状态(如某服务应启动、某文件应存在)

  • 自动将机器配置为该状态

  • 检查偏离并自动修复

使用方式

  1. 编写配置文件(.ps1

  2. 编译成 MOF 文件

  3. 使用 Push 或 Pull 模式部署

DSC 特别适用于大规模服务器配置、合规检查和自动化部署。


八、命令发现与帮助系统

PowerShell 提供了丰富的帮助系统,让你可以轻松探索命令:

  • Get-Help Get-Process:查看命令帮助

  • Get-Command:列出所有命令

  • Get-Member:查看对象属性与方法

  • Get-Help about_*:查看内置知识文档(如 about_Execution_Policies

示例:查看对象结构

Get-Command -CommandType Cmdlet0

总结

概念关键词简述
Cmdlet动词-名词最小执行单元,基于 .NET
管道``对象而非文本传递
ProviderFileSystemEnv:统一访问各类资源
模块.psm1.psd1组织可重用命令集合
执行策略Set-ExecutionPolicy控制脚本运行权限
远程管理Enter-PSSession远程执行命令
DSCConfiguration声明式系统配置平台
帮助系统Get-Help自带文档系统