所有工具
免费

可搜索、可打印的 PowerShell 参考手册——cmdlet、管道、变量、文件、循环、函数、对象以及系统管理。免费。

获取帮助与发现

12
Get-Help Get-Process
显示 cmdlet 的帮助
Get-Help Get-Process -Examples
显示 cmdlet 的用法示例
Get-Help Get-Process -Full
显示含参数的完整帮助
Get-Help about_Functions
阅读 about_ 概念主题
Update-Help
下载最新帮助文件
Get-Command -Noun Process
列出作用于某名词的 cmdlet
Get-Command -Verb Get
列出使用某动词的 cmdlet
Get-Command *service*
按通配符名称搜索命令
Get-Process | Get-Member
列出对象的属性和方法
Get-Alias ls
显示别名所解析到的命令
Get-Alias -Definition Get-ChildItem
列出某 cmdlet 的所有别名
$PSVersionTable
显示 PowerShell 版本和版次

变量与类型

13
$x = 5
为变量赋值
[int]$n = '42'
声明强类型变量
$null
null/空值
$true; $false
布尔字面量
$arr = @(1, 2, 3)
创建数组
$arr += 4
向数组追加元素
$arr[0]; $arr[-1]
索引数组的首尾元素
$hash = @{ Name = 'Ann'; Age = 30 }
创建哈希表
$hash['Name']; $hash.Name
按键读取哈希表值
$env:PATH
读取环境变量
$env:MY_VAR = 'value'
为会话设置环境变量
Get-Variable
列出所有已定义变量
[math]::Round(3.14159, 2)
调用静态 .NET 方法

管道与筛选

12
Get-Process | Where-Object { $_.CPU -gt 10 }
按条件筛选对象
Get-Process | ? CPU -gt 10
用 ? 别名和简化语法筛选
Get-Process | ForEach-Object { $_.Name }
为每个对象运行脚本块
Get-Process | % { $_.Kill() }
用 % 别名遍历
Get-Process | Select-Object Name, Id
仅保留特定属性
Get-Process | Select-Object -First 5
取前 N 个对象
Get-Process | Sort-Object CPU -Descending
按属性排序对象
Get-Process | Group-Object Company
按属性分组对象
Get-Process | Measure-Object CPU -Sum
聚合数值(求和、平均)
Get-ChildItem | Select-Object -Unique
返回去重对象
1..5 | ForEach-Object { $_ * 2 }
将范围通过变换管道传递
Get-Process | Out-GridView
将结果发送到交互式网格

文件与路径

13
Get-ChildItem -Path C:\Logs
列出目录中的项(别名 ls/dir)
Get-ChildItem -Recurse -Filter *.log
递归列出匹配的文件
Get-Content .\file.txt
逐行读取文件
Get-Content .\file.txt -Tail 20
读取文件的最后 N 行
Set-Content .\file.txt -Value 'Hi'
向文件写入(覆盖)文本
Add-Content .\file.txt -Value 'Hi'
向文件追加文本
Copy-Item a.txt b.txt
复制文件或目录
Move-Item a.txt .\dir\
移动或重命名项
Remove-Item a.txt -Force
删除文件或目录
New-Item -ItemType Directory -Path .\dir
创建新文件或目录
Test-Path .\file.txt
检查路径是否存在
Get-Location
显示当前目录(别名 pwd)
Set-Location C:\Temp
切换当前目录(别名 cd)

字符串与文本

12
'Hello World' -match 'World'
用正则测试字符串
'Hello' -replace 'l', 'L'
用正则替换文本
'a,b,c' -split ','
按正则将字符串拆分为数组
'a-b-c'.Split('-')
用 .NET String 方法拆分
'a', 'b' -join ', '
将数组元素连接为字符串
Select-String -Path *.log -Pattern 'error'
跨文件的 grep 式搜索
'{0} of {1}' -f 3, 10
用占位符格式化字符串
' hi '.Trim()
去除首尾空白
'Hello'.ToUpper()
将字符串转为大写
'Hello'.Substring(0, 3)
按索引和长度提取子串
'Hello'.Contains('ell')
测试字符串是否包含文本
'Hello'.Length
获取字符数

循环与条件

12
if ($x -gt 0) { 'pos' } elseif ($x -eq 0) { 'zero' } else { 'neg' }
用 if / elseif / else 分支
switch ($x) { 1 { 'one' } default { 'other' } }
将值与各 case 匹配
foreach ($i in $arr) { $i }
遍历集合
for ($i = 0; $i -lt 5; $i++) { $i }
带索引的计数循环
while ($x -lt 10) { $x++ }
条件为真时循环
do { $x++ } while ($x -lt 10)
先循环一次再测试
$x -eq 5; $x -ne 5
相等与不等比较
$x -gt 5; $x -lt 5
大于与小于比较
$x -ge 5; $x -le 5
大于等于/小于等于比较
'abc' -like 'a*'
通配符匹配比较
@(1, 2, 3) -contains 2
测试数组成员资格
break; continue
退出或跳过当前循环迭代

函数与脚本

12
function Get-Sum { param($a, $b) $a + $b }
定义带参数的函数
Get-Sum -a 2 -b 3
用命名参数调用函数
function Test { param([int]$n = 1) }
带默认值的类型化参数
param([Parameter(Mandatory)]$Name)
要求必须提供某参数
return $value
从函数返回值
function F { [CmdletBinding()] param() }
创建高级函数(含通用参数)
Write-Verbose 'msg' -Verbose
发出详细消息流
Write-Output $result
将对象发送到管道
Write-Error 'failed'
写入错误流
.\script.ps1 -Arg value
用参数运行脚本文件
. .\functions.ps1
将脚本点源加载到会话
try { } catch { $_ } finally { }
处理终止性错误

对象与属性

12
Get-Process | Select-Object -ExpandProperty Name
返回原始属性值而非对象
(Get-Process).Name
访问每个对象上的属性
Get-Process | Select-Object Name, @{ Name = 'MB'; Expression = { $_.WS / 1MB } }
添加计算属性
[PSCustomObject]@{ Name = 'Ann'; Age = 30 }
构建自定义对象
$obj | Add-Member -NotePropertyName Tag -NotePropertyValue 'x'
为对象附加属性
$obj.PSObject.Properties.Name
列出对象的属性名
$obj | Format-Table -AutoSize
以对齐表格显示对象
$obj | Format-List *
以列表显示所有属性
$obj | ConvertTo-Json -Depth 5
将对象序列化为 JSON
Get-Content data.json | ConvertFrom-Json
将 JSON 解析为对象
$obj | Export-Csv out.csv -NoTypeInformation
将对象导出为 CSV 文件
Import-Csv data.csv
将 CSV 文件读入为对象

进程与服务

12
Get-Process
列出运行中的进程(别名 ps)
Get-Process -Name chrome
按名称获取进程
Stop-Process -Name notepad -Force
终止进程
Start-Process notepad.exe
启动新进程
Get-Service
列出 Windows 服务
Get-Service -Name wuauserv
按名称获取服务
Start-Service -Name wuauserv
启动已停止的服务
Stop-Service -Name wuauserv
停止运行中的服务
Restart-Service -Name wuauserv
重启服务
Set-Service -Name wuauserv -StartupType Manual
更改服务启动模式
Get-EventLog -LogName System -Newest 20
读取最近的经典事件日志条目
Get-WinEvent -LogName Application -MaxEvents 20
查询现代事件日志

远程与作业

12
Enter-PSSession -ComputerName Srv01
启动交互式远程会话
Exit-PSSession
退出交互式远程会话
Invoke-Command -ComputerName Srv01 -ScriptBlock { Get-Service }
在远程主机上运行命令
$s = New-PSSession -ComputerName Srv01
创建持久远程会话
Invoke-Command -Session $s -ScriptBlock { hostname }
复用现有远程会话
Remove-PSSession $s
关闭并移除远程会话
Start-Job -ScriptBlock { Get-Process }
将命令作为后台作业运行
Get-Job
列出后台作业及其状态
Receive-Job -Id 1 -Keep
获取作业的输出
Wait-Job -Id 1
阻塞直到作业完成
Stop-Job -Id 1; Remove-Job -Id 1
停止并移除后台作业
Get-Process | Start-ThreadJob { $input }
运行轻量的进程内线程作业

模块与包

12
Get-Module
列出当前已加载的模块
Get-Module -ListAvailable
列出所有已安装的模块
Import-Module Pester
将模块加载到会话
Remove-Module Pester
从会话卸载模块
Find-Module -Name PSReadLine
在库中搜索模块
Install-Module PSReadLine -Scope CurrentUser
从库安装模块
Update-Module PSReadLine
更新已安装的模块
Uninstall-Module PSReadLine
移除已安装的模块
Get-ExecutionPolicy
显示当前脚本执行策略
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
允许运行签名和本地脚本
Get-PSRepository
列出已配置的包仓库
$PROFILE
当前用户配置脚本的路径

没有条目匹配“:q”。


需要帮助?
使用此工具时遇到问题?请告诉我们的团队。
报告问题

将此免费工具添加到你自己的网站 — 复制并粘贴下面的代码。