How do you write a powershell function that reads from piped input?

无人久伴 提交于 2019-12-07 01:18:18

问题


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

回答1:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!