PowerShell 语法
PowerShell 语法
简单介绍
PowerShell 是一个跨平台的命令行工具。
特性
CMD是直接对 Windows 操作系统进行交互PowerShell是基于.Net平台的,可直接使用.Net 类库- 可在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}
变量赋值:
- 给多个变量赋值
$a = $b = $c = 123 - 交换变量的值
$a = 1 $b = 2 $value1,$value2=$value2,$value1
变量打印:
$varecho $var- write-host / write-output /write-Error +
$var
查看变量类型
$var.GetType()
变量作用域:
| 作用域 | 解释说明 |
|---|---|
| $global | 全局变量,在所有的作用域中有效,如果你在脚本或者函数中设置了全局变量,即使脚本和函数都运行结束,这个变量也任然有效。 |
| $script | 脚本变量,只会在脚本内部有效,包括脚本中的函数,一旦脚本运行结束,这个变量就会被回收。 |
| $private | 私有变量,只会在当前作用域有效,不能贯穿到其他作用域。 |
| $local | 默认变量,可以省略修饰符,在当前作用域有效,其它作用域只对它有只读权限。 |
例子:
#全局变量
$global: var1 = value1
#局部变量
$var2 = value2
#脚本变量
$script: var3 = value3
内置数据元素
数组
数组内可以存一切的内容, 是弱类型的语言
-
数组创建
- 使用逗号
$array = value1,value2,... - 连续的数(
可正序可反序)$array=1..9 # 1,2,3,4,5,6,7,8,9 $array2 = 9..1 # 9,8,7,6,5,4,3,2,1 - 使用@符号
$array=@(value1,value2,...) $null_array = @() # 内容为空的数组
- 使用逗号
-
数组的访问:
- 数组索引
-
单个元素:
访问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
哈希表
-
哈希表创建
$hashmap = @{key1="value1";key2="value2";...} -
哈希表中可存储数组
$hashmap = @{key1="value1_1,value1_2,...";...} -
显示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 | 验证路径是否存在 | 未指定默认报错 |

浙公网安备 33010602011771号