精选 PowerShell 常用指令与核心速查备忘单,涵盖动词-名词 Cmdlet、管道处理、WMI 硬件查询、注册表管理及脚本编写。
PowerShell 命令行工具采用统一的【动词-名词】(Verb-Noun) 命名格式。
常见动词 (Verbs) 含义:
| 动词 (Verb) | 含义与用途描述 |
|---|---|
| Get | 获取或检索指定信息 |
| Set | 配置或更改系统/对象设置 |
| New | 创建新的对象实例或项目 |
| Remove | 删除或清理指定项目 |
| Invoke | 执行特定的动作或脚本操作 |
| Start | 启动或发起一个进程或操作 |
| Stop | 暂停、停止或终止运行中的进程 |
| Enable | 激活或启用指定功能/特性 |
| Disable | 停用或禁用指定功能/特性 |
| Test | 执行功能测试、连通性或状态检查 |
| Update | 更新或刷新数据/配置信息 |
列出当前系统所有可用的模块
Get-Module --ListAvailable
列出指定模块包含的 Cmdlet 和函数
Get-Command -Module ActiveDirectory
获取命令帮助文档
Get-Help <cmd>
Get-Help <cmd> -Examples
Get-Help -Name Get-Process -Parameter Id
列出所有别名 (Alias) 及其对应的真实 Cmdlet 名称
Get-Alias | Select-Object Name, Definition
Get-Member: 显示对象的属性 (Properties) 和方法 (Methods)
Get-Process | Get-Member
Select-Object: 选择对象的特定属性或自定义输出展示
Get-Process | Select-Object Name, CPU
Where-Object: 按指定条件过滤集合对象
Get-Service | Where-Object { $PSItem.Status -eq 'Running' }
# 或使用简写别名 ?
Get-Service | ? { $_.Status -eq 'Running' }
Measure-Object: 计算统计数据(如求和 Sum、平均值 Average、计数 Count 等)
Get-Process | Measure-Object -Property WorkingSet -Sum
ForEach-Object: 遍历集合中的每一个对象并执行指定操作(警告:以下命令将给当前目录下的所有文件添加前缀)
Get-ChildItem | ForEach-Object { Rename-Item $_ -NewName "Prefix_$_" }
Sort-Object: 按指定属性对对象进行排序
Get-ChildItem | Sort-Object Length -Descending
Format-Table: 将输出格式化为带有指定列的表格
Get-Service | Format-Table -AutoSize # 别名为 ft
Format-List: 将输出格式化为属性与值的列表
Get-Process | Format-List -Property Name, CPU # 别名为 fl
New-Item -path file.txt -type 'file' -value 'contents'
New-Item -path file.txt -type 'dir'
Copy-Item <src> -destination <dest>
Move-Item -path <src> -destination <dest>
Remove-Item <file>
Test-Path <path>
Rename-Item -path <path> -newname <newname>
# 调用 .NET 基础基类库 (Base Class Library)
[System.IO.File]::WriteAllText('test.txt', '')
[System.IO.File]::Delete('test.txt')
Get-Content -Path "test.txt"
Get-Process | Out-File -FilePath "processes.txt"# 输出结果到文件
Get-Process | Export-Csv -Path "processes.csv" # 导出为 CSV 文件
$data = Import-Csv -Path "data.csv" # 从 CSV 文件导入数据
# 获取 BIOS 固件信息
Get-CimInstance -ClassName Win32_BIOS
# 获取本地连接的物理磁盘设备信息
Get-CimInstance -ClassName Win32_DiskDrive
# 获取已安装的物理内存 (RAM) 信息
Get-CimInstance -ClassName Win32_PhysicalMemory
# 获取已安装的网络适配器 (物理与虚拟网卡)
Get-CimInstance -ClassName Win32_NetworkAdapter
# 获取显卡/视频控制器 (GPU) 信息
Get-CimInstance -ClassName Win32_VideoController
# 列出所有可用的 ClassClassName
Get-CimClass | Select-Object -ExpandProperty CimClassName
# 探索 root\cimv2 命名空间下的各类 WMI 类
Get-CimClass -Namespace root\cimv2
# 探索 root\cimv2 命名空间下的子 WMI 命名空间
Get-CimInstance -Namespace root -ClassName __NAMESPACE
# 测试与远程主机的网络连通性 (Ping)
Test-Connection -ComputerName google.com
# 获取网卡适配器信息
Get-NetAdapter
# 获取 IP 地址配置信息
Get-NetIPAddress
# 获取系统路由表信息
Get-NetRoute
# 测试远程主机的特定端口是否开放
Test-NetConnection google.com -Port 80
# 获取本地用户账号信息
Get-LocalUser
# 创建新的本地用户账号
New-LocalUser -Name NewUser -Password (ConvertTo-SecureString "Password123" -AsPlainText -强制执行)
# 删除本地用户账号
Remove-LocalUser -Name UserToRemove
# 获取本地用户组信息
Get-LocalGroup
# 将成员添加到本地用户组 (如 Administrators 管理员组)
Add-LocalGroupMember -Group Administrators -Member UserToAdd
# 获取文件/目录的访问控制列表 (ACL)
Get-Acl C:\Path\To\File.txt
# 设置文件/目录的访问控制列表
Set-Acl -Path C:\Path\To\File.txt -AclObject $aclObject
# 读取注册表键值
Get-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*" | Select DisplayName, DisplayVersion
# 修改注册表键值
Set-ItemProperty -Path "HKLM:\Software\MyApp" -Name "SettingName" -Value "NewValue"
# 创建新的注册表键值项
New-ItemProperty -Path "HKCU:\Software\MyApp" -Name "NewSetting" -Value "NewValue" -PropertyType String
# 删除注册表键值
Remove-ItemProperty -Path "HKCU:\Software\MyApp" -Name "SettingToRemove"
# 检查注册表路径是否存在
Test-Path "HKLM:\Software\MyApp"
初始化变量(带类型或不带类型约束):
$var = 0
[int] $var = 'Trevor' # (抛出强类型转换异常)
[string] $var = 'Trevor' # (正常声明为字符串类型)
$var.GetType()
# 多个变量并发赋值
$a,$b,$c = 'a','b','c'
# 创建数组变量
$arrayvar = @('va1','va2')
# 创建哈希字典变量
$dict = @{k1 = 'test'; k2 = 'best'}
变量相关 Cmdlet 命令
New-Variable -Name FirstName -Value Trevor
New-Variable FirstName -Value Trevor -Option <ReadOnly/Constant>
Get-Variable
Get-Variable | ? { $PSItem.Options -contains 'constant' }
Get-Variable | ? { $PSItem.Options -contains 'readonly' }
Remove-Variable -Name firstname
# 强制删除只读变量
Remove-Variable -Name firstname -强制执行
常见变量数据类型:int32, int64, string, bool
# 运算符语法结构:
# (a <运算符> b)
= , += / -= , ++ / --
-eq / -ne , -lt / -gt , -le / -ge
$FirstName = 'Trevor'
$FirstName -like 'T*'
$true; $false # 布尔值 true/false
# 三元运算符 (Ternary Operator)
$FoodToEat = $BaconIsYummy ? 'bacon' : 'beets'
# -notin 或 -in 包含判断
'Celery' -in @('Bacon', 'Sausage', 'Steak')
# 输出: True
5 -is [int32]
# 正则表达式匹配 (支持数组)
'Trevor' -match '^T\w*'
# 正则多重匹配
$regex = [regex]'(\w*)'
$regex.Matches('this is test').Value
输入 / 输出操作 (I/O)
"直接打印字符串"
Write-Host "带颜色的彩色文本" -ForegroundColor Red
$age = Read-host "请输入年龄"
$pwd = Read-host "请输入密码" -asSecureString
Clear-Host
控制流语句 (Flow Controls)
IF(<#条件#>){
<#要执行的命令#>}ELSEIF(){}ELSE{}
Switch($var){
"val1"{<#命令#>; break}
"val2"{<#命令#>; break}
}
For($ct=0;$ct -le 3;$ct++){}
ForEach($var in $arr){}
while($var -ne 0){}
Do{}While()
示例 1
function funcname{
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[String]$user
)
Write-Host "welcome " $user
return "value"
}
$var = funcname -user pcb
示例 2
function Get-EvenNumbers {
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline = $true)]
[int] $Number
)
begin {<#初始化动作#>}
process {
if ($Number % 2 -eq 0) {
Write-Output $Number
}
}
end {<#收尾动作#>}
}
1..10 | Get-EvenNumbers
模块管理 (Modules)
# 查看 PowerShell 查找模块的路径环境变量
$env:PSModulePath
# 列出系统上已安装的所有模块
Get-Module -ListAvailable
# 查看当前会话中已导入的模块
Get-Module
Import-Module <moduleName>
Remove-Module <moduleName>
Find-Module -Tag cloud
Find-Module -Name ps*
# 在内存中创建临时的 PowerShell 模块
New-Module -Name trevor -ScriptBlock {
function Add($a,$b) { $a + $b } }