PowerShell 不只是一个命令行工具,它的设计理念、功能架构和使用方式与传统 Shell 有着显著区别。
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
在传统 Shell 中,管道 (|
) 传递的是文本字符串。而在 PowerShell 中,管道传递的是完整的 .NET 对象。
这就意味着你可以保留结构化数据(属性、方法)进行后续处理。
Get-Process | Where-Object { $_.CPU -gt 100 } | Select-Object Name, CPU
上述命令中:
Get-Process
获取所有进程(返回对象)
Where-Object
过滤 CPU 使用率大于 100 的进程
Select-Object
只输出 Name
和 CPU
字段
你不需要使用 awk
、cut
、grep
等工具去"解析"输出,而是直接操作对象属性。
PowerShell 提供了一种统一的资源访问方式:Provider 模型,它把各种资源映射为虚拟驱动器(PSDrive),就像 C:
盘一样操作。
Provider | 示例驱动器 | 说明 |
---|---|---|
FileSystem | C: , D: | 本地文件系统 |
Registry | HKLM: , HKCU: | Windows 注册表 |
Environment | Env: | 环境变量 |
Certificate | Cert: | 证书存储 |
Function | Function: | 当前会话中的函数 |
Variable | Variable: | 当前定义的变量 |
Alias | Alias: | 命令别名 |
Get-ChildItem HKLM:\Software\Microsoft
就像浏览文件夹一样浏览注册表。
PowerShell 脚本是以 .ps1
为扩展名的文本文件
包含一系列命令、流程控制、函数等
模块是 PowerShell 中用于复用的功能单元,它可以是:
一个 .psm1
文件(模块脚本)
一个包含 .psd1
清单的文件夹(高级模块)
模块可支持:
自动加载(当使用其中函数时自动加载)
版本控制
依赖声明
查看系统中所有模块:
Get-Module -ListAvailable
导入模块:
Import-Module Az
为了防止恶意脚本执行,PowerShell 引入了 执行策略(Execution Policy),它限制 .ps1
脚本文件的执行行为。
策略 | 含义 |
---|---|
Restricted | 默认,不允许运行任何脚本 |
RemoteSigned | 允许本地脚本运行,远程脚本需签名 |
AllSigned | 所有脚本都需签名 |
Bypass | 无限制,不建议在生产中使用 |
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
⚠️ 注意:执行策略只影响脚本文件,不限制手动输入的命令。
PowerShell Remoting 支持通过 WS-MAN(基于 WinRM) 或 SSH 协议,远程连接到另一台计算机并执行命令。
Enable-PSRemoting -Force
# 建立远程会话Enter-PSSession -ComputerName Server01# 批量执行命令Invoke-Command -ComputerName Server01,Server02 -ScriptBlock { Get-Service }
Enter-PSSession -HostName linux01 -User user1 -SSHTransport
DSC(Desired State Configuration)是 PowerShell 的声明式配置平台,用于定义系统的"理想状态"。
它允许你:
用配置脚本定义资源状态(如某服务应启动、某文件应存在)
自动将机器配置为该状态
检查偏离并自动修复
编写配置文件(.ps1
)
编译成 MOF 文件
使用 Push 或 Pull 模式部署
DSC 特别适用于大规模服务器配置、合规检查和自动化部署。
PowerShell 提供了丰富的帮助系统,让你可以轻松探索命令:
Get-Help Get-Process
:查看命令帮助
Get-Command
:列出所有命令
Get-Member
:查看对象属性与方法
Get-Help about_*
:查看内置知识文档(如 about_Execution_Policies
)
Get-Command -CommandType Cmdlet0
概念 | 关键词 | 简述 | |
---|---|---|---|
Cmdlet | 动词-名词 | 最小执行单元,基于 .NET | |
管道 | ` | ` | 对象而非文本传递 |
Provider | FileSystem , Env: | 统一访问各类资源 | |
模块 | .psm1 , .psd1 | 组织可重用命令集合 | |
执行策略 | Set-ExecutionPolicy | 控制脚本运行权限 | |
远程管理 | Enter-PSSession | 远程执行命令 | |
DSC | Configuration | 声明式系统配置平台 | |
帮助系统 | Get-Help | 自带文档系统 |