zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    从GoogleClusterData统计每个用户的使用率、平均每次出价
    简单的大众点评爬虫
    导入GoogleClusterData到MySQL
    高斯分布(正态分布)
    解决Mysql无法导入存在null数据的问题
    使用Python操作MySQL
    [Vue warn]: Duplicate keys detected: '0'. This may cause an update error.
    css多行超出时,超出高度,显示省略号
    mock.js学习之路(二)easy-mock(Vue中使用)
    mock.js学习之路一(Vue中使用)
  • 原文地址:https://www.cnblogs.com/myanswer/p/12186082.html
Copyright © 2011-2022 走看看