返回
首页

Powershell cheatsheet

帮助

Get-Help alias
Show-Command Get-Help
Get-Command Get-*
Get-Alias -name l*
Get-Alias -definition Get-Alias

文件和路径

Get-ChildItem [path]; ls; dir       # 子对象列表
(dir -Recurse).Name                 # 递归列出文件名
(dir -Recurse).FullName             # 递归列出完整路径
Get-Location; $pwd; $pwd.Path       # 显示当前位置(非UNC路径)
$pwd.ProviderPath                   # 显示当前位置(UNC路径)
Set-Location path                   # 更改当前位置
Resolve-Path path                   # 绝对路径
(Get-Item filespec).Name            # 文件名
(Get-Item filespec).DirectoryName   # 所在文件夹名
(Get-Item filespec).Parent          # 所在文件夹名
($pwd[0].Path).split("\")[-2]       # 上级目录名

UNC(Universal Naming Convention),类似\\softer这样的形式的网络路径

句法要素

ElementAction
# 这是评论单行评论
<# ... #>多行评论
结尾连续多行执行命令
;分割单行多个命令
转义字符
`n, `t不可打印的字符

三元运算

switch(boolExpr) {
    $true { $x }
    $false { $y }
}

if(boolExpr) {$x} else {$y}

显示选项

CommandAction
any | Format-Listlist 化列表
any | Format-Tabletable 化列表
any | Out-GridViewtable 化列表,交互式界面

格式化 + 过滤

# table化输出到文件
any | Format-Table -AutoSize | Out-File file -Encoding ascii

# table化输出到文件
any | Format-Table -AutoSize | Out-String | Set-Content file

# 格式化 + 过滤
any | Format-Table -AutoSize | Out-String -Stream | ForEach { $_.TrimEnd() } |where { $PSItem } | Set-Content file

# alias 实例
ps | ft -auto| Out-String -Stream | %{ $_.TrimEnd() } | ? { $_ } | sc file

提示和暂停

CommandAction
Read-Host prompt输入提示
Start-Sleep seconds暂停特定时长
Read-Host -Prompt prompt暂停等待 Enter 继续
Clear-Host清屏

语法

变量

$a = 25; $a                                 #=> 25
42 | sv a; $a                               #=> 42
[ValidateRange(1,10)][int]$x = 1; $x = 22   #=> _error_

$a = 25; '$a not interpolated'              #=> $a not interpolated
$a = 25; "$a interpolated"                  #=> $a interpolated

$arr = "aaa","bbb","x"; $arr                #=> aaa bbb x
$OFS='/'; "arr is [$arr]"                   #=> arr is [aaa/bbb/x]

ls | % { $_.name }                          # $_ 为循环变量

参数传递

function func($a,$b) {
    "{0}/{1}" -f $a.length, $b.length
}

func 5 3                 # 空格传递多个参数
$a = 5, 3; func @a       # 数组传递多个参数
func 2,3 4               # 数组作为单个参数传递
'/tmp' | dir             # 管道符传参

单引号纯文本输出,双引号会解析其中变量

属性

gm -input (1..5) -name count                  # 尝试获取属性

ps | ? { $_.VM -gt 100MB }                    # 默认属性
ps | ? { $_.VM -gt 100MB } | select name, vm  # 指定属性
ps | ? { $_.Name -match "^m"} | ft            # table
ps | ? { $_.Name -match "^m"} | fl            # list
$PWD | ConvertTo-Json -Depth 1                # toJSON

对象、类型和转型

@(Get-Process).Count                           # 集合大小
(1,2,3).GetType().FullName                     # 对象类型
ps | gm | select -First 1 | % { $_.TypeName }  # 集合中对象类型
"hello" -is [string]                           # 类型判断
"35.2" -as [int]                               # 转型
[char]48                                       # ASCII码转字符
[byte][char] "A"                               # 字符转ASCII码
"0x{0:x}" -f 64                                # integer转16进制
$newObj = $oldObj | select *                   # 拷贝对象
$newObj = $oldObj | select * -except property  # 拷贝对象并排除

服务、进程操作

Get-Service -Name $name | Start-Service -PassThru  # 启动服务
Get-Process -Name PowerShell                       # 获取进程信息
Get-Process -Name PowerShell | Get-Member          # 获取进程更多属性

比较运算

OPdesc
-eq等于
-ne不等于
-gt大于
-ge大于或等于
-lt小于
-le小于或等于
-Like使用 \* 通配符进行匹配
-NotLike不使用 \* 通配符进行匹配
-Match匹配指定的正则表达式
-NotMatch不匹配指定的正则表达式
-Contains确定集合中是否包含指定的值
-NotContains确定集合是否不包含特定值
-In确定指定的值是否在集合中
-NotIn确定指定的值是否不在集合中
-Replace替换指定的值

表中列出的所有运算符都不区分大小写。 将 c 放置在运算符之前,使其区分大小写。 例如,-ceq 是区分大小写的 -eq 比较运算符。

Get-Service | Where-Object Name -eq w32time