Powershell 创建管道脚本


我们可以像创建管道函数那样创建管道脚本,具体采用低速顺序模式,还是高速流模式,这取决于具体的编程实现。

低速顺序模式

如果你在脚本中使用管道,脚本收集上一个语句的执行结果,默认保存在$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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注