我们可以像创建管道函数那样创建管道脚本,具体采用低速顺序模式,还是高速流模式,这取决于具体的编程实现。
低速顺序模式
如果你在脚本中使用管道,脚本收集上一个语句的执行结果,默认保存在$input自动变量中。但是直到上一条语句完全执行彻底,管道脚本才会执行。
创建脚本:
pipeline.ps1
foreach ($element in $input) { if($element.Extension -eq ".exe") { Write-Host -fore "red" $element.Name } else { Write-Host -fore "Green" $element.Name } }
执行脚本:
PS E:> ls $env:windir | .pipeline.ps1
如果这样执行:
PS E:> ls $env:windir -Recurse | .pipeline.ps1
控制台会被冻结,因为存储的中间结果在玩命的吃内存。这个也是低速顺序模式的缺点。
高速流模式
在Powershell脚本的处理中,绝大多数情况下遇到的都是集合,一旦上一条命令产生一个中间结果,下一条命令就对这个中间结果及时处理,及时释放资源。这样可以节省内存,也减少了用户的等待时间。在处理大量数据时,尤其值得推荐。高速流模式的管道定义包括三部分:begin,process,end。上面的描述中提到了中间结果,中间结果保存在$_自动化变量中。
输入脚本文件:
begin { Write-Host "管道脚本环境初始化" } process { $ele=$_ if($_.Extension -ne "") { switch($_.Extension.tolower()) { ".ps1" {"脚本文件:"+ $ele.name} ".txt" {"文本文件:"+ $ele.Name} ".gz" {"压缩文件:"+ $ele.Name} } } } end { Write-Host "管道脚本环境恢复" }
执行脚本文件:
PS E:> ls | .pipeline.ps1 管道脚本环境初始化 文本文件:a.txt 压缩文件:Metrol.tar.gz 脚本文件:MyScript.ps1 脚本文件:pipeline.ps1 脚本文件:PSLib.ps1 管道脚本环境恢复
本文链接: https://www.pstips.net/powershell-create-pipeline-scripts.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!