2012-08-09 78 views
6

求解:如何编写从管道输入读取的PowerShell功能?

以下是使用管道输入的函数/脚本的最简单可能的示例。每个行为与管道到“echo”cmdlet的行为相同。

作为功能:

Function Echo-Pipe { 
    Begin { 
    # Executes once before first item in pipeline is processed 
    } 

    Process { 
    # Executes once for each pipeline object 
    echo $_ 
    } 

    End { 
    # Executes once after last pipeline object is processed 
    } 
} 

Function Echo-Pipe2 { 
    foreach ($i in $input) { 
     $i 
    } 
} 

作为脚本:

#回声Pipe.ps1
Begin { 
    # Executes once before first item in pipeline is processed 
    } 

    Process { 
    # Executes once for each pipeline object 
    echo $_ 
    } 

    End { 
    # Executes once after last pipeline object is processed 
    } 
#回声Pipe2.ps1
foreach ($i in $input) { 
    $i 
} 

例如

PS > . theFileThatContainsTheFunctions.ps1 # This includes the functions into your session 
PS > echo "hello world" | Echo-Pipe 
hello world 
PS > cat aFileWithThreeTestLines.txt | Echo-Pipe2 
The first test line 
The second test line 
The third test line 

回答

12

您还可以使用高级功能的选项,而不是上面的基本方法:

function set-something { 
    param(
     [Parameter(ValueFromPipeline=$true)] 
     $piped 
    ) 

    # do something with $piped 
} 

应该是显而易见的,只有一个参数,可以直接绑定到管道输入。但是,你可以有多个参数绑定到不同性质的管道输入:

function set-something { 
    param(
     [Parameter(ValueFromPipelineByPropertyName=$true)] 
     $Prop1, 

     [Parameter(ValueFromPipelineByPropertyName=$true)] 
     $Prop2, 
    ) 

    # do something with $prop1 and $prop2 
} 

希望这可以帮助你在你的旅程,学习另一种外壳。