PowerShell 核心概念
PowerShell 不只是一个命令行工具,它的设计理念、功能架构和使用方式与传统 Shell 有着显著区别。
一、Cmdlet:最小命令单元
什么是 Cmdlet?
Cmdlet(发音为 command-let)是 PowerShell 中最基本的命令单元,它们都是基于 .NET 的类,运行后会返回一个或多个 .NET 对象。
命名规则:动词-名词
每个 Cmdlet 都遵循 动词-名词 命名规范,例如:
Cmdlet | 含义 |
---|---|
Get-Process |
获取进程信息 |
Set-Item |
设置某个资源项的值 |
Remove-Item |
删除文件、注册表项等 |
New-User |
创建新用户(若安装了 AD 模块) |
PowerShell 附带了数百个 Cmdlet,且第三方模块可以自定义更多。
示例
Get-Service Get-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
字段
管道传值之美
你不需要使用 awk
、cut
、grep
等工具去"解析"输出,而是直接操作对象属性。
三、Provider 和 PSDrive:资源驱动器抽象
PowerShell 提供了一种统一的资源访问方式:Provider 模型,它把各种资源映射为虚拟驱动器(PSDrive),就像 C:
盘一样操作。
常见 Provider 类型
Provider | 示例驱动器 | 说明 |
---|---|---|
FileSystem | C: , D: |
本地文件系统 |
Registry | HKLM: , HKCU: |
Windows 注册表 |
Environment | Env: |
环境变量 |
Certificate | Cert: |
证书存储 |
Function | Function: |
当前会话中的函数 |
Variable | Variable: |
当前定义的变量 |
Alias | Alias: |
命令别名 |
示例:操作注册表
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 的声明式配置平台,用于定义系统的"理想状态"。
它允许你:
- 用配置脚本定义资源状态(如某服务应启动、某文件应存在)
- 自动将机器配置为该状态
- 检查偏离并自动修复
使用方式
- 编写配置文件(
.ps1
) - 编译成 MOF 文件
- 使用 Push 或 Pull 模式部署
DSC 特别适用于大规模服务器配置、合规检查和自动化部署。
八、命令发现与帮助系统
PowerShell 提供了丰富的帮助系统,让你可以轻松探索命令:
Get-Help Get-Process
:查看命令帮助Get-Command
:列出所有命令Get-Member
:查看对象属性与方法Get-Help about_*
:查看内置知识文档(如about_Execution_Policies
)
示例:查看对象结构
Get-Process | Get-Member
总结
概念 | 关键词 | 简述 | |
---|---|---|---|
Cmdlet | 动词-名词 |
最小执行单元,基于 .NET | |
管道 | ` | ` | 对象而非文本传递 |
Provider | FileSystem , Env: |
统一访问各类资源 | |
模块 | .psm1 , .psd1 |
组织可重用命令集合 | |
执行策略 | Set-ExecutionPolicy |
控制脚本运行权限 | |
远程管理 | Enter-PSSession |
远程执行命令 | |
DSC | Configuration |
声明式系统配置平台 | |
帮助系统 | Get-Help |
自带文档系统 |
点我分享笔记