Powershell学习笔记

PowerShell

# 获取当前对象的信息
$value[0] |Get-Member
# 获取当前对象的属性
$value[0] |Get-Member -MemberType Property

PowerShell是Cmd的超集,包含支持CMD, 但其中参数作用不一定支持.PowerShell支持.net

大小写不敏感

PowerShell在线教程

PowerShell

get-help # 获取帮助
​
cmd  # 进入cmd控制台
exit # 退出cmd
cmd /c -help # 查找可使用的CMD指令
​
ls  # 当前目录文件夹名称列表
“ls” # ls 输出字符串
&“ls” # 执行ls命令
​
​
Get-Alias -name ls # 查询别名所指Cmdlet

命令集

执行

PowerShell脚本扩展名为.ps1

  • 相对路径:./<ps1_name.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:Usersxuqiuyingforhollow.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

  • Script Browser

原文地址:https://www.cnblogs.com/myanswer/p/12186082.html