Pipeline input
A question on the forum asked about creating a function that accepts pipeline input OR has a path parameter. Means it can be used like this
myfunction -Path C:\scripts\Test\proc.csv
or
(Get-Content C:\scripts\Test\files.txt) | myfunction
First create a csv file
Get-Process | Export-Csv proc.csv –NoTypeInformation
and test its contents
Import-Csv proc.csv
The full path to the csv file is:- C:\scripts\Test\proc.csv
The function is like this
function myfunction{
[CmdletBinding()]
param (
[parameter(ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true)]
[string]$Path
)
PROCESS{
if (-not (Test-Path -Path $path)){
Throw "Path NOT found $path"
}
Import-Csv -Path $path
}#process
}
Use [CmdletBinding()] to get the debug and verbose parameters
Use ValueFromPipeline and ValueFromPipelineByPropertyName attributes [parameter()]
This covers generic input and if we have a csv with path as a column.
if you are accepting pipeline input you need to use a PROCESS block
Then the path is tested and rejected if not valid. Finally import-csv is used to read the file