PowerShell 语法

PowerShell 语法

简单介绍

PowerShell 是一个跨平台的命令行工具。

特性

  1. CMD 是直接对 Windows 操作系统进行交互
  2. PowerShell 是基于 .Net平台的,可直接使用 .Net 类库
  3. 可在Shell 下
    • 执行数学运算表达式(+、-、*、/、%)
    • 执行外部脚本文件
    • 可对命令、函数起别名

基本概念

项目 说明
标识符 不区分大小写,但字符串要区分
扩展文件名 .ps1
执行脚本 & + 脚本

PowerShell 语法:

注释

  • 单行注释
    # 注释内容

  • 多行注释
    <# 注释内容#>

变量类型

  • 用户自定义
  • 自动变量
  • 首选项变量

自动变量

编号 变量 描述
1 $$ 会话接收到的最后一行中的最后一个令牌
2 $? 最后一个操作的执行状态。如果没有错误返回True,否则返回False
3 $^ 会话接收到的第一个令牌
4 $_ 和PSItem等价表示当前对象
5 $args 传递给脚本函数,函数或脚本块的参数数组
6 $ConsoleFileName 控制台文件的路径
7 $Error 最新错误对象数组
8 $Event 瓷白能量用于包含PSEventArgs的对象。PSEventArgs是用于表示正在处理的事件的事件订阅者
9 $EventSubscribera 正在处理的事件订阅者
10 $EventArgs 此变量包含一个对象,表示第一个事件的参数
11 $false 表示False
12 $foreach 此变量用于包含foreach 循环的枚举数,仅在执行foreach循环时存在,完成后销毁
13 $Home 用户主目录的完整路径
14 $input 此变量包含一个枚举器,该枚举器枚举传递给该函数的所有输入。它仅适用于脚本块和功能
15 $Host 显示当前主机应用程序
16 $IsLinux 判断是否运行在Linux上
17 $IsWindows 判断是否运行在Windows上
18 $IsMacOS 判断是否运行在MacOS上
19 $null null 值
20 $PID 当前Powershell 进程 id
21 $PSItem 与变量$_等价,它在管道对象中包含当前对象
22 $PSHome widnows power shell安装目录完整路径
23 $PSVersionTable 当前会话中运行的power shell版本信息
24 $PWD 当前路径
25 $ShellId 当前shell的标识符

自定义变量
$ + 标识符

$var = value #自动创建,并初始化

变量引用:

$var${var}

变量赋值:

  1. 给多个变量赋值
    $a = $b = $c = 123
    
  2. 交换变量的值
    $a = 1
    $b = 2
    $value1,$value2=$value2,$value1
    

变量打印:

  1. $var
  2. echo $var
  3. write-host / write-output /write-Error + $var

查看变量类型

$var.GetType()

变量作用域:

作用域 解释说明
$global 全局变量,在所有的作用域中有效,如果你在脚本或者函数中设置了全局变量,即使脚本和函数都运行结束,这个变量也任然有效。
$script 脚本变量,只会在脚本内部有效,包括脚本中的函数,一旦脚本运行结束,这个变量就会被回收。
$private 私有变量,只会在当前作用域有效,不能贯穿到其他作用域。
$local 默认变量,可以省略修饰符,在当前作用域有效,其它作用域只对它有只读权限。

例子:

#全局变量
$global: var1 = value1 
#局部变量
$var2 = value2  
#脚本变量
$script: var3 = value3

内置数据元素

数组

数组内可以存一切的内容, 是弱类型的语言

  • 数组创建

    1. 使用逗号
      $array = value1,value2,...
      
    2. 连续的数(可正序可反序
      $array=1..9 # 1,2,3,4,5,6,7,8,9
      $array2 = 9..1 # 9,8,7,6,5,4,3,2,1
      
    3. 使用@符号
      $array=@(value1,value2,...)
      
      $null_array = @() # 内容为空的数组
      
  • 数组的访问:

    1. 数组索引
    • 单个元素:

      访问Index位置的元素

      $array[Index] #其中Index的取值范围是从-$var.Size() 到 $var.Size() - 1, 值为负时,逆向索引
      
    • 多个元素:

      访问多个索引位置对应的元素,索引间用逗号,区分

      $array[start..end]
      # start: 开始位置
      # end: 结束位置  
      # 输出从start位置到end位置的元素
      
  • 数组元素添加

    • 弱类型添加:
     $array += value   
    
    • 强类型添加:

    在数组变量前 加类型名

    [int []] $name=@("A","B")
    
  • 数组长度

$arr_len = $array.Length

哈希表

  1. 哈希表创建

    $hashmap = @{key1="value1";key2="value2";...}
    
  2. 哈希表中可存储数组

    $hashmap = @{key1="value1_1,value1_2,...";...}
    
  3. 显示key、value值

    $hashmap["key"] #返回Key键的值
    $hashmap.keys   #返回所有key
    $hashmap.values #返回所有values
    

管道

对象

  • Powershell中处处皆为对象。

  • 对象就会有属性,方法等之称。

  • 新建对象:
    new-object + 对象名

运算符

  • 算术运算符

    运算符 解释
    + 加法
    - 减法
    * 乘法
    / 除法
    % 求余
  • 比较运算符:

    运算符 解释
    -eq 等于
    -ne 不等于
    -gt 大于
    -ge 大于等于
    -lt 小于
    -le 小于等于
    -contains 包含
    -notcontains 不包含
  • 赋值运算符

    运算符 解释
    = 赋值
    += 相加之后再赋值
    -= 相减之后再赋值
  • 求反运算符:

    运算符 解释
    -not
  • 布尔运算符:

    运算符 解释
    -and
    -or
    -xor 异或
    -not
  • 拆分运算符 (用于字符串)

    运算符 解释
    -Join 将多个字符串合并为1个
    -Split 将1个或多个字符串拆成多个子字符串
  • 其他运算符

    运算符 解释
    > 重定向文件运算符
    >> 追加文件内容运算符
    >&1 重定向成功流,命令执行成功后流入
    | 管道运算符

控制结构

  • If
# 1
if(condition){
    执行语句
}

# 2   
if(condition){
    执行语句 
}
Else{
    执行语句
}

# 3        
if(condition){
    执行语句
}
ElseIf(condition){
    执行语句
}
  • Switch
Switch($value)
{
    匹配值1 {执行语句}
    匹配值2 {执行语句}
    匹配值3 {执行语句}
    匹配值4 {执行语句}
    
    Default {执行语句}
}
  • 支持通配符:
*  #匹配所有
  • 正则表达式:
-regex($val)

例子:

$value=18   

# 使用 Switch 测试取值范围
switch($value)
{
    {$_ -lt 10} {"小于10"}
    10  {"等于10"}
    {$_  -gt 10} {"大于10"}
}

输出

大于10

  • 支持集合循环:

例子:

$nums = 10..7
Switch ($nums)
{
    {($_ % 2) -eq 0} {"$_ 偶数"}
    {($_ % 2) -ne 0} {"$_ 奇数"}
}

输出:

10 偶数
9 奇数
8 偶数
7 奇数

循环结构

  • 跳出循环关键字:

    关键字 解释
    break 跳出循环语句
    continue 跳出本次循环
  • for

# C 语言风格
for(;;;)     
{
    执行语句
}
  • foreach
foreach (元素  in 集合)
{
    执行语句
}
  • while:
while(条件)
{
    执行语句
}
  • do-while:
do{
    执行语句
}
while(条件)

函数

  • 参数

    参数类型 参数解释
    任意参数 内部变量$args 接受函数调用时接受的参数,$args是一个数组类型
    命名参数 函数的每一个参数可以分配一个名称,在调用时通过名称指定对应的参数
    预定义参数 函数在定义参数时可以指定默认值,如果调用时没有专门指定参数的值,就会保持默认值
  • 定义

# 参数可以写在函数体 ,与 管道写法一致,需要加Param关键字
#高级函数
Function 函数名{
    [cmdletbinding()]
    Param(参数表)
    Process{

    }
    执行语句
}

#普通函数
Function 函数名(args[]){
    ...
}
  • 删除:
del Function:函数名
  • 调用 与 传参:
函数名  参数名1 参数名2 ...
  • 返回值:

    • 1个返回值
    return value
    
    • 多个返回值:
    return {
        value1
        value2
        ...
    }
    

    {
        value1
        return value2
        ...     # ---- return后面不会返回, 因为return 返回后就直接结束函数了。
    }
    
  • 管道函数 :

    创建管道函数后,可使用管道符|进行管道处理

    • 顺序模式: --- 效率低

    将上一个执行结构保留到 $input

    例子:

    PS E:mossfly.com> Function output
    >> {
    >>    $input
    >> }
    
    PS E:mossfly.com> 1,2,3 | output
    
    • 流模式: --- 高效率

    利用begin、process、end 语句块

    # 管道函数
    Function 函数名
    {
        begin
        {
            
        }
        process
        {
            
        }
        end
        {
            
        }
    }
    

错误处理

try{
    ...
}
catch{
    ...
}
finally{
    ...
}

字符串相关操作:

  • Powershell转义字符表

    转义字符 描述
    \n 换行符
    \r 回车符
    \t 制表符
    \a 响铃符
    \b 退格符
    单引号
    双引号
    0 Null
    反引号本身
  • 字符串操作符:

    • -f 格式化字符串
    占位符{0},{1},{2},{3},...
    
    • * 代表一个字符串
    “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]”
    

powershell命令操作 变量

命令 命令解释 备注
Clear-Variable 清除指定变量 未指定默认不清除
Get-Variable 获取指定变量 未指定默认列出所有变量
New-Variable 创建指定变量 未指定默认报错
Remove-Variable 删除指定变量 未指定默认报错
Set-Variable 设置指定变量 未指定默认报错
Test-Path 验证路径是否存在 未指定默认报错
posted @ 2019-07-19 19:32  Kernel001  阅读(1987)  评论(0编辑  收藏  举报