SOLVED:
The following are the simplest possible examples of functions/scripts that use piped input. Each behaves the same as piping to the "echo" cmdlet.
As functions:
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
}
}
As Scripts:
# Echo-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
}
# Echo-Pipe2.ps1
foreach ($i in $input) {
$i
}
E.g.
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
x0n
You also have the option of using advanced functions, instead of the basic approach above:
function set-something {
param(
[Parameter(ValueFromPipeline=$true)]
$piped
)
# do something with $piped
}
It should be obvious that only one parameter can be bound directly to pipeline input. However, you can have multiple parameters bind to different properties on pipeline input:
function set-something {
param(
[Parameter(ValueFromPipelineByPropertyName=$true)]
$Prop1,
[Parameter(ValueFromPipelineByPropertyName=$true)]
$Prop2,
)
# do something with $prop1 and $prop2
}
Hope this helps you on your journey to learn another shell.
来源:https://stackoverflow.com/questions/11880114/how-do-you-write-a-powershell-function-that-reads-from-piped-input