Powershell学习笔记
# 获取当前对象的信息
$value[0] |Get-Member
# 获取当前对象的属性
$value[0] |Get-Member -MemberType Property
PowerShell是Cmd的超集,包含支持CMD, 但其中参数作用不一定支持.PowerShell支持.net
大小写不敏感
get-help # 获取帮助 cmd # 进入cmd控制台 exit # 退出cmd cmd /c -help # 查找可使用的CMD指令 ls # 当前目录文件夹名称列表 “ls” # ls 输出字符串 &“ls” # 执行ls命令 Get-Alias -name ls # 查询别名所指Cmdlet
执行
PowerShell脚本扩展名为.ps1
-
-
绝对路径运行
注:PowerShell默认为安全模式,禁止执行.ps1脚本
# 以管理员权限打开powershell # 输入以下命令 Set-ExecutionPolicy RemoteSigned Get-Command -Verb <string> # 获取匹配字符的命令
文件系统命令
非常重要的文件系统命令概览 | ||
---|---|---|
别名 | 描述 | 命令 |
cp, cpi | 复制文件或者目录 | Copy-Item |
Dir, ls, gci | 列出目录的内容 | Get-Childitem |
type, cat, gc | 基于文本行来读取内容 | Get-Content |
gi | 获取指定的文件或者目录 | Get-Item |
gp | 获取文件或目录的属性 | Get-ItemProperty |
ii | 使用对应的默认windows程序运行文件或者目录 | Invoke-Item |
— | 连接两个路径为一个路径 | Join-Path |
mi, mv, move | 移动文件或者目录 | Move-Item |
ni | 创建新文件或者目录 | New-Item |
ri, rm, rmdir,del, erase, rd | 删除空目录或者文件 | Remove-Item |
rni, ren | 重命名文件或者路径 | Rename-Item |
rvpa | 处理相对路径或者包含通配符的路径 | Resolve-Path |
sp | 设置文件或路径的属性 | Set-ItemProperty |
Cd,chdir, sl | 更改当前目录的位置 | Set-Location |
— | 提取路径的特定部分,例如父目录,驱动器,文件名 | Split-Path |
— | 测试指定的路径是否存在 | Test-Path |
Dir|ls
-
-name 当前目录的所有文件(夹)的名字获取名字
-
-recurse 列出子目录的所有文件(夹)
-
-literalPath 特殊字符本身含义
-
-filter 简单模式匹配
-
-include 正则表达式模式匹配 ,比fliter更搞笑准确,支持数组
-
-exclude 清除符合正则表达式模式匹配,支持数组
重定向
# 单行重定向 '"Hello,Powershell Script"' > MyScript.ps1 .\MyScript.ps1 # "Hello,Powershell Script" # 多行重定向 @‘ echo 1 echo 2 '@>MyScript.ps1 # 双引号会使变量被解析,不要使用双引号 .\MyScript.ps1 # 1 # 2
脚本内调用其他脚本
@‘Function Factorial([int]$n) { $total=1 for($i=1;$i -le $n;$i++) { $total*=$i } return $total } Factorial $n '@>MySrcipt.ps1 @‘ param([int]$n=$(throw "请输入一个正整数")) . .\MySrcipt.ps1 '@>MyScript.ps1 .\MyScript.ps1 13 # 6227020800
PowerShell调用优先级
别名>函数>命令>脚本>文件
正则表达式
变量
大小写不敏感, 支持对象赋值
变量定义
$var=<value> # 定义变量
$var # 输出变量
# 特殊字符建议不要使用,使用加花括号
${var $}=<value>
${var $}
New-Variable var -Value 100 -Force -Option readonly # 可设置变量其他属性
$var # 100 且变量值不可被修改但可用del强制删除
$var=99 # 报错
del varible:var -Force # 强制删除var
$var=99
$var # 99
New-variable num -Value "strong" -Option constant # 变量设置后不可被任何命令删除
new-variable name -Value "me" -Description "This is my name" # 设置变量描述,默认不显示
ls Variable:name | fl * # 显示变量描述
自动变量
PowerShell启动时自动加载的预设变量
自动变量 | 含义 |
---|---|
$$ | ls |
$? | $?的上一条命令的执行状态。如果操作成功,则 TRUE,失败则 FALSE |
$^ | $^的上一条命令的第一个命令令牌 |
$_ | 包含管道对象中的当前对象。在对管道中的每个对象或所选对象执行操作的命令中,可以使用此变量。 |
$Args | 包含由未声明参数和/或传递给函数、脚本或脚本块的参数值组成的数组。 在创建函数时可以声明参数,方法是使用 param 关键字或在函数名称后添加以圆括号括起、逗号 分隔的参数列表。 |
$ConsoleFileName | 包含在会话中最近使用的控制台文件 (.psc1) 的路径。在通过 PSConsoleFile 参数启动 Windows PowerShell 或使用 Export-Console cmdlet 将管理单元名称导出到控制台文件 时,将填充此变量。 |
$Error | 包含错误对象的数组,这些对象表示最近的一些错误。最近的错误是该数组中的第一个错误对象 ($Error[0])。 |
环境变量
赋值与返回值
可赋值数值、命令,对象
$item=Get-ChildItem $item # 输出当前目录文件及文件夹名称 # 多重赋值 $a=$b=$c=1 # a=1 b=1 c=1 $c=2 # a=1 b=1 c=2 #数值交换 $a,$c=$c,$a # a=2 c=1 del variable:<var> # 删除变量,但一般不需要删除,PowerShell退出时自动清除
相关命令
ls variable: # 所有当前所使用的变量信息 ls variable:<var> # <var>变量信息 ls variable:<*> # 可使用正则匹配查找变量信息 Test-Path variable:<var> # 查询是否存在<var>变量
字符串操作
格式化操作符(-F)
多个变量使用“,”(逗号)连接
"{0} diskettes per CD" -f (720mb/1.44mb) # 500 diskettes per CD "{0} {1}" -f (720mb/1.44mb),"test" # 500 test "{1} {0}" -f (720mb/1.44mb),"test" # test 500
数值格式 ({index[,alignment] [: format ]}: )
-
index
唯一标识匹配值({0}、{1}.......) -
alignment
正数与负数, 指定目标值是左对齐或右对齐 -
format
数值可以被格式化成许多不同的类型
数值格式化
符号 | 类型 | 调用示例 | 输入结果 |
---|---|---|---|
# | 数字占位符 | “{0:(#).##}” -f $value | (1000000) |
% | 百分号 | “{0:0%}” -f $value | 100000000% |
, | 千分符 | “{0:0,0}” -f $value | 1,000,000 |
,. | 一千的整数倍 | “{0:0,.} ” -f $value | 1000 |
. | 小数点 | “{0:0.0}” -f $value | 1000000.0 |
0 | 占位符 0 | “{0:00.0000}” -f$value | 1000000.0000 |
c | 货币 | “{0:c}” -f $value | ¥1,000.00 |
d | 十进制 | “{0:d}” -f $value | 1000000 |
e | 科学计数法 | “{0:e}” -f $value | 1.000000e+006 |
e | 指数通配符 | “{0:00e+0}” -f $value | 10e+5 |
f | 保留小数位 | “{0:f}” -f $value | 1000000.00 |
g | 常规 | “{0:g}” -f $value | 1000000 |
n | 千分符 | “{0:n}” -f $value | 1,000,000.00 |
x | 十六进制 | “0x{0:x4}” -f $value | 0x4240 |
时间格式化
符号 | 类型 | 调用示例 | 输出 |
---|---|---|---|
d | 短日期格式 | “{0:d}” –f $value | 2013/6/1 |
D | 长日期格式 | “{0:D}” –f $value | 2013年6月1日 |
t | 短时间格式 | “{0:t}” –f $value | “{0:t}” –f $value |
T | 长时间格式 | “{0:T}” –f $value | 23:18:50 |
f | 完整日期和时间(短) | “{0:f}” –f $value | 2013年6月1日 23:18 |
F | 完整日期和时间(长) | “{0:F}” –f $value | 2013年6月1日 23:18:50 |
g | 标准时间 (短) | “{0:g}” –f $value | 2013/6/1 23:18 |
G | 标准时间长 (长) | “{0:G}” –f $value | 2013/6/1 23:18:50 |
M | 月日格式 | “{0:M}” –f $value | 6月1日 |
r | RFC1123 日期格式 | “{0:r}” –f $value | Sat, 01 Jun 2013 23:18:50 GMT |
s | 排序日期格式 | “{0:s}” –f $value | 2013-06-01T23:18:50 |
u | 通用日期格式 | “{0:u}” –f $value | 2013-06-01 23:18:50Z |
U | 通用排序日期 GMT格式 | “{0:U}” –f $value | 2013年6月1日 15:18:50 |
Y | 年/月格式模式 | “{0:Y}” –f $value | 2013年6月 |
自定义日期格式 | |||
dd | 一个月中天 | “{0:dd}” -f $value | 01 |
ddd | 星期的缩写 | “{0:ddd}” -f $value | 周六 |
dddd | 完整星期 | “{0:dddd}” -f $value | 星期六 |
gg | 纪年法 | “{0:gg}” -f $value | 公元 |
hh | 小时0-12 | “{0:hh}” -f $value | 11 |
HH | 小时0-23 | “{0:HH}” -f $value | 23 |
mm | 分钟 | “{0:mm}” -f $value | 18 |
MM | 月份 | “{0:MM}” -f $value | 06 |
MMM | 月份缩写 | “{0:MMM}” -f $value | 六月 |
MMMM | 完整月份 | “{0:MMMM}” -f $value | 六月 |
ss | 秒 | “{0:ss}” -f $value | 55 |
tt | 上午或者下午 | “{0:tt}” -f $value | 下午 |
yy | 两位数字的年份 | “{0:yy}” -f $value | 13 |
yyyy | 四位数字的年份 | “{0:yyyy}” -f $value | 2013 |
zz | 不包含分钟的时区 | “{0:zz}” -f $value | +08 |
zzz | 包含分钟的时区 | “{0:zzz}” -f $value | +08:00 |
替换
-
replace(大小写不敏感)
-
ireplace(大小写不敏感)
-
creplace(大小写敏感)
"Hello Carl" -replace "Carl", "Eddie" # Hello Eddie "Hello Carl" -ireplace "Carl", "Eddie" # Hello Eddie "Hello carl" -creplace "Carl", "Eddie" # Hello carl
操作符表格
字符串操作符 | ||
---|---|---|
操作符 | 描述 | 示例 |
* | 代表一个字符串 | “PsTips.Net” -like “*” |
+ | 合并两个字符串 | “Power” + “Shell” |
-replace,-ireplace | 替换字符串,大小写不敏感 | “PsTips.Net” -replace “tip”,”1″ |
-creplace | 替换字符串,大小写敏感 | “PsTips.Net” -replace “Tip”,”1″ |
-eq, -ieq | 验证是否相等,大小写不敏感 | “Power” -eq “power” |
-ceq | 验证是否相等,大小写敏感 | “Power” -eq “Power” |
-like, -ilike | 验证字符串包含关系,允许模式匹配,大小写不敏感 | “PsTips.Net” -like “p*” |
-clike | 验证字符串包含关系,允许模式匹配,大小写敏感 | “PsTips.Net” – clike “P*” |
-notlike,-inotlike | 验证字符串不包含关系,允许模式匹配,大小写不敏感 | “PowerShell” -notlike “PS*” |
-cnotlike | 验证字符串不包含关系,允许模式匹配,大小写敏感 | “PowerShell” -cnotlike “PO*” |
-match,-imatch | 验证模式匹配,大小写不敏感 | “PowerShell” -match “P*” |
-cmatch | 验证模式匹配,大小写敏感 | “Hello” -match “[ao]” |
-notmatch,-inotmatch | 验证模式不匹配,大小写不敏感 | “Hello” -notmatch “[ao]” |
-cnotmatch | 验证模式不匹配,大小写敏感 | “Hello” -cnotmatch “[ao]” |
数组
$array=@() # 空数组 $array=,1 # 单个数组 $array=1,2,3,3 # 1,2,3,3 $array=1..5 # 连续数字数组 1,2,3,4,5 $array=5..1 # 5,4,3,2,1 # 若为弱类型,则可存储不同类型的变量 $array=1,4,"aaa",(Get-Date) # 1,4,aaa,2019年12月25日 14:07:28 # 强类型定义,只能存储满足对应类型的元素 [int[]]$num=@() $num+=1 # 1 $num+="test" 》》抛出异常 $array[0] # 索引寻址 $b=$array[0,1] # 多元素 返回值为数值 1,4 $array[($array.Count)..0] # 2019年12月25日 14:07:28, aaa, 4, 1 # 逆序 # 添加 $array+=1 # 1,4,aaa,2019年12月25日 14:07:28,1 # 删除 $b=$array[0..2]+$array[4] # 1,4,aaa,1 # 复制引用,公用同一地址 $b=$array $b[0]=2 # 2,4,aaa,2019年12月25日 14:07:28,1 $array # 2,4,aaa,2019年12月25日 14:07:28,1 # 复制 $b=$array.Clone() $b[0]=3 # 3,4,aaa,2019年12月25日 14:07:28,1 $array # 2,4,aaa,2019年12月25日 14:07:28,1
命令返回数组
-
文件的每一行识别为一个数组元素
-
命令不止一个返回结果,结果自动存储为数组
${C:\Users\xuqiuying\for\hollow.ps1} $test='test' $test.ToCharArray() -is [array] # 字符转数组 $test=ls # 命令结果返回给变量 $test=ipconfig $test -is [arrary] # True 是否为数组 $test.Count # 数组大小 $test[index] |fl * # 查看某个元素的对象属性与方法 fl:Format-List
哈希表
$hash=@{} $stu=@{ Name = "小明";Age="12";sex="男" } $stu["Name"] $stu.Keys $stu.Values $for=@{ test1 ="test"; for=1,2,3} # 添加 $stu.grade=30 # 更新 $stu.grade=40 # 删除 $stu.Remove("grade")
Cmdlet
Get-Alias
获取cmdlet别名
-
-name <别名> # 别名所指Cmdlet
别名
由于cmdlet过长,不易记住,所以对cmdlet设定别名
# 看所有别名和指向cmdlet的别名的个数 ls alias: | Group-Object definition | sort -Descending Count # 查看以remove开头的cmdlet dir alias: | where {$_.Definition.Startswith("Remove")} # 说明:dir alias:获取的是别名的数组,通过where对数组元素进行遍历,$_代表当前元素,alias的Definition为String类型,因为powershell支持.net,.net中的string类有一个方法Startswith。通过where过滤集合在powershell中使用非常广泛
别名操作
创建别名
简单别名
Set-Alias -Name Edit -Value notepad # 创建记事本别名 Edit # 启动记事本 $alias:Edit # 查看别名所指 Set-Alias echo_value .\MyScript.ps1 echo_value # 执行MyScript.ps1
函数别名
function test-conn { Test-Connection -Count 2 -ComputerName $args} Set-Alias tc test-conn tc localhost
保存别名
Export-Alias <Alias_File_Path(.ps1)> # 导出别名配置文件 Import-Alias <Alias_File_Path(.ps1)> # 导入别名配置文件 Import-Alias -Force <Alias_File_Path(.ps1)> # 当别名已设置有冲突,强制导入,注意不能使用系统预设别名
删除别名
# 方法一 # powershell退出时自动清除自定义别名,内置powershell别名不会清除 # 方法二 del alias:Edit
Cmdlet 别名集
Cmdlet | 别名 |
---|---|
Get-ChildItem | ls |
Enter | 执行当前命令 |
End | 将光标移至当前命令的末尾 |
Del | 从右开始删除输入的命令字符 |
Esc | 清空当前命令行 |
F2 | 自动补充历史命令至指定字符 (例如历史记录中存在Get-Process,按F2,提示"Enter char to copy up to",键入‘s’,自动补齐命令:Get-Proce) |
F4 | 删除命令行至光标右边指定字符处 |
F7 | 对话框显示命令行历史记录 |
F8 | 检索包含指定字符的命令行历史记录 |
F9 | 根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看 |
左/右方向键 | 左右移动光标 |
上/下方向键 | 切换命令行的历史记录 |
Home | 光标移至命令行最左端 |
Backspace | 从右删除命令行字符 |
Ctrl+C | 取消正在执行的命令 |
Ctrl+左/右方向键 | 在单词之间移动光标 |
Ctrl+Home | 删除光标最左端的所有字符 |
Tab | 自动补齐命令或者文件名 |
四则运算
支持正常的数学表达式,使用如简单计算器
+ - * / %
# 支持 + - * / % 3+1 # 4 3/2 # 1.5 3-1 # 2 3*2 # 6 ((1+5)*2-(1+2))%2 # 1 #自动识别计算机容量单位,包括KB,MB,GB,TB,PB 2TB/1GB # 2084 2TB/1gB # 2048
条件判断
比较运算符
-
-eq :等于
-
-ne :不等于
-
-gt :大于
-
-ge :大于等于
-
-lt :小于
-
-le :小于等于
-
-contains :包含
-
-
# 过滤数组中的元素 1,2,3,4,3,2,1 -eq 3 #3,3 # 一个数组是否存在特定元素 1,9,4,5 -contains 9 # True 1,9,4,5 -notcontains 10 # True
:不包含
where-Object
对多个对象进行判断
Get-Process | select -First 1 | fl * # 获取对象的属性 Get-Process | Where-Object {$_.Name -eq "notepad"} # 根据进程名过滤所有记事本进程 Get-Process | Where-Object {$_.Name -eq "iexplore"} #根据进程名过滤所有IE进程 Get-Process | Where-Object {$_.company -like '*Microsoft*' }|select Name,Description,Company # 根据company过滤所有产品发布者以”Microsoft”打头的进程 Get-Service | ? {$_.Name -like "B*"}
if_Elseif_Else
if($n -lt 0 ){"-1" } elseif($n -eq 0){"0"} else {"1"} # 1
Switch
-
大小写敏感
switch -case ($domain)
-
使用通配符
switch -wildcard($domain
) -
使用正则
switch -regex ($mail)
-
支持多值操作 $value=array|hash
求反
-
-not # 含义同高级语言!
布尔运算
-
-and :和
-
-or :或
-
-xor :异或
-
-not :逆
For循环
ForEach-Object
Get-WmiObject Win32_Service | ForEach-Object { if ($_.ProcessId -gt 3000) { "{0}({1})" -f $_.DisplayName,$_.ProcessID} }
ForEach
foreach($i in $array){ #### }
For
for($i=1;$i -le 100; i++){ $i+=$i }
while()
-
do{}while()
-
while(){}
do {$n=read-host} while($n -ne 0) while($n -ne 0){ $n $n=read-host}
-
continue
-
break
Switch
$n=10..7 switch ($n) { default {"n=$_"} } #n=10 #n=9 #n=8 #n=7 switch ($n) { default {"n=$_";break} } # n=10
输入输出
输出:
特殊字符
单引号
(特殊字符原样输出)
$text='$fei $(tai) $env:windir Hello (20+2012)' $text # $fei $(tai) $env:windir Hello (20+2012)
双引号
$site=" Hello Powershell" $text="$site $(get-date) $env:windir" $text # Hello Powershell 01/03/2020 15:29:34 C:\windows # 双引号内的形如$(expression),表达式会先执行,结果代替表达式输出 "当前日期:$(get-date)" # 当前日期:01/03/2020 15:32:43 "1GB=$(1gb/1kb)KB" # 1GB=1048576KB
转义字符“``”(反引号)
# 使用单引号闭合字符串输出双引号 # The site of blog is”www” # 使用转义字符输出双引号 “blog site is`"www`"" #blog site is”www” # 在字符串中输出换行符 “The site of blog is `"www`",`博客" # The site of my blog is “www”, # 博客
函数
定义函数
Function fun_name (args[]) { code; }
函数参数(脚本参数同法)
-
args 可不指定参数,即可传入任意个参数,使用$args
function sayHello { if($args.Count -eq 0) { "No argument!" } else { $args | foreach {"Hello,$($_)"} } $args.GetType() # array }
-
设置参数
function StringContact($str1,$str2) { return $str1+" "+$str2 } StringContact moss fly # moss fly StringContact -str1 moss -str2 swim #moss swim
-
参数默认值
function stringContact($str1="moss",$str2="fly") { return $str1+" "+$str2 } StringContact # moss fly StringContact tom swim # tom swim
-
强类型参数
function subtract([int]$value1,[int]$value2) { return $value1-$value2 } subtract moss fly # 异常抛出 subtract 13 2 # 11
函数返回值
-
返回单值
return
-
返回多值
function gbMeasure($amount) { "$amount GB=$($amount) GB" "$amount GB=$($amount*1gb/1mb) MB" "$amount GB=$($amount*1gb/1kb) KB" "$amount GB=$($amount*1gb) B" $A=1 $A } gbMeasure 1 # 1 GB=1 GB # 1 GB=1024 MB # 1 GB=1048576 KB # 1 GB=1073741824 B # 1 $array = gbMeasure 1 #返回数组
函数返回值控制输出
Function out() { Write-Host "This is a comment" "123456" Write-Host "End" Write-Debug "only show on debug module" } $value=out # This is a comment # End $value # 123456
函数管道(脚本管道)
顺序模式(低效率)
Function test(){ $input # 获取管道送给函数的值 } 1,2,3|test # 1 # 2 # 3 Function MarkEXE { # 保存控制台当前的前景色 $oldcolor = $host.ui.rawui.ForegroundColor # 通过循环逐条检查管道的结果 Foreach ($element in $input) { # 如果后缀名为.exe,设置为前景色为红色 If ($element.name.toLower().endsWith(".exe")) { $host.ui.Rawui.ForegroundColor = "red" } Else { # 否则恢复默认的前景色 $host.ui.Rawui.ForegroundColor = $oldcolor } # 输出数组元素 $element } # 最后,重置控制台的前景色: $host.ui.Rawui.ForegroundColor = $oldcolor } Dir c: -recurse | MarkEXE
缺点:处理大数据时会大量消耗内存和导致进程等待
流模式(高效率-过滤器-Filter(函数))
Filter MarkEXE { # 记录当前控制台的背景色 $oldcolor = $host.ui.rawui.ForegroundColor # 当前的管道元素保存在 $_ 变量中 # 如果后缀名为 ".exe", # 改变背景色为红色: If ($_.name.toLower().endsWith(".exe")) { $host.ui.Rawui.ForegroundColor = "red" } Else { # 否则使用之前的背景色 $host.ui.Rawui.ForegroundColor = $oldcolor } # 输出当前元素 $_ # 最后恢复控制台颜色: $host.ui.Rawui.ForegroundColor = $oldcolor } Dir c: -recurse | MarkEXE
Filter代替function。for循环被删除,因filter代替循环。$_代表当前遍历对象
管道函数(begin-Process-end)
Function MarkEXE { begin { # 记录控制台的背景色 $oldcolor = $host.ui.rawui.ForegroundColor } process { # 当前管道的元素 $_ # 如果后缀名为 ".exe", # 改变背景色为红色: If ($_.name.toLower().endsWith(".exe")) { $host.ui.Rawui.ForegroundColor = "red" } Else { # 否则, 使用正常的背景色: $host.ui.Rawui.ForegroundColor = $oldcolor } # 输出当前的背景色 $_ } end { # 最后,恢复控制台的背景色: $host.ui.Rawui.ForegroundColor = $oldcolor } }
脚本管道
begin { Write-Host "管道脚本环境初始化" } process { $ele=$_ if($_.Extension -ne "") { switch($_.Extension.tolower()) { ".ps1" {"脚本文件:"+ $ele.name} ".txt" {"文本文件:"+ $ele.Name} ".gz" {"压缩文件:"+ $ele.Name} } } } end { Write-Host "管道脚本环境恢复" }
文件处理
管道
管道基于对象
do {$n=read-host} while($n -ne 0)
错误处理
WhatIF(模拟操作)
#如果执行stop-process -name *a*会终止下面的进程。 Stop-Process -Name *a* -WhatIf
自定义函数(脚本)支持模拟运行(switch)
function MapDrive([string]$driveletter, [string]$target, [switch]$whatif) { If ($whatif) { Write-Host "WhatIf: creation of a network drive " + "with the letter ${driveletter}: at destination $target" } Else { New-PSDrive $driveletter FileSystem $target } } MapDrive k 127.0.0.1c$ -whatif # WhatIf: creation of a network drive + with the letter k: at destination 127.0.0.1c$
逐步检查(-confirm)
Stop-Process -Name *cm* -Confirm
-
是 – 仅继续执行操作的下一步骤。
-
全是 – 继续执行操作的所有步骤。 否 – 跳过此操作并继续执行下一操作。
-
不全是 – 跳过此操作及所有后续操作。
-
挂起 – 暂停当前管道并返回到命令提示符。键入“exit”可继续执行该管道。
-
帮助 – 提供帮助信息
自动检测危险系数高的操作
格式化表格输出 Format-Table
Dir|ft
Dir|ft FullName,Mode
表格的每一个列包含四个属性:
-
Expression:绑定的表达式
-
Width:列宽度
-
Label:列标题
-
Alignment:列的对齐方式
$column1 = @{expression="Name"; width=30;label="filename"; alignment="left"} $column2 = @{expression="LastWriteTime"; width=40;label="last modification"; alignment="right"} ls | Format-Table $column1, $column2
-
Format-Custom: 使用自定义视图来设置输出的格式。
-
Format-List: 将输出的格式设置为属性列表,其中每个属性均各占一行显示
-
Format-Table: 将输出的格式设置为表。
-
Format-Wide: 将对象的格式设置为只能显示每个对象的一个属性的宽表。
快捷键
ALT+F7 | 清除命令的历史记录 |
---|---|
PgUp PgDn | 显示当前会话的第一个命令和最后一个命令 |
Enter | 执行当前命令 |
End | 将光标移至当前命令的末尾 |
Del | 从右开始删除输入的命令字符 |
Esc | 清空当前命令行 |
F2 | 自动补充历史命令至指定字符 (例如历史记录中存在Get-Process,按F2,提示"Enter char to copy up to",键入‘s’,自动补齐命令:Get-Proce) |
F4 | 删除命令行至光标右边指定字符处 |
F7 | 对话框显示命令行历史记录 |
F8 | 检索包含指定字符的命令行历史记录 |
F9 | 根据命令行的历史记录编号选择命令,历史记录编号可以通过F7查看 |
左/右方向键 | 左右移动光标 |
上/下方向键 | 切换命令行的历史记录 |
Home | 光标移至命令行最左端 |
Backspace | 从右删除命令行字符 |
Ctrl+C | 取消正在执行的命令 |
Ctrl+左/右方向键 | 在单词之间移动光标 |
Ctrl+Home | 删除光标最左端的所有字符 |
Tab | 自动补齐命令或者文件名 |
插件
-
Script Analyzer
-