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
变量打印:
$var
echo $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 | 验证路径是否存在 | 未指定默认报错 |