7.0
- 管道平行化,
ForEach-Object -Parallel
,foreach可以并行运行,效率极大提升 - 新的操作符
- 三元运算符
a ? b : c
- 管道链操作符,(
&&
and||
) - 空值可选操作符(
??
and??=
)
- 三元运算符
- 简化和动态的错误视图,还有增加了
Get-Error
命令 - 增加兼容层,允许用户在windows powershell会话中隐式导入模块
- 新版本自动提醒
- 从powershell7中调用DSC资源 (实验性的)
关于管道链操作符(&&
and||
)
三元运算符和空值可选操作符,其实js里面也有,比较常用了。
这个管道链操作符,我用的还是比较少,其实npm script 里就有这种语法。
这两个操作符是利用$?
和$LASTEXITCODE
这两个变量来判断管道是否执行成功的。
&&
的作用是,如果左边的管道成功,继续执行后右边的管道,如果左边失败,则不执行右边的管道。也就是执行到有一个不成功为止
下面两次执行就能帮我们理解 &&
操作符的逻辑。
Write-Output 'First' && Write-Output 'Second'
First
Second
Write-Error 'Bad' && Write-Output 'Second'
Write-Error: Bad
||
如果左边的管道成功,那就只执行左边的,如果左边不成功,那就执行右边的,也就是执行到有一个成功的为止
Write-Output 'First' || Write-Output 'Second'
Write-Error 'Bad' || Write-Output 'Second'
管道链的等价语法
由于链式操作符是根据$?
变量判断管道是否执行成功,其实就是一个语法糖,下面两个例子就是转换
Test-Command '1' && Test-Command '2'
Test-Command '1'; if ($?) { Test-Command '2' }
下面是 ||
操作符的转化
Test-Command '1' || Test-Command '2'
Test-Command '1'; if (-not $?) { Test-Command '2' }
管道链的赋值
$result = Write-Output '1' && Write-Output '2'
$result
1
2
如果管道链中发生错误,赋值就不会成功,
7.2
- 新的通用安装包,支持大多数linux发行版
- windows上 Microsoft Update 支持
- 2个实验特性
- 本地命令参数传递支持
- ANSI 文件信息色彩支持
- 提升Tab补全
- PSReadLine 2.1,智能感知
- 7个实验特性提升为主流,一个被移除
- 移除DSC
- 几个提升可用性的破坏性更改
总结一下,就7.0新加的语法有用,7.2和7.3加的东西,反正我是看不懂的。改动比较小。
网友评论