2012-08-09 16 views
6

SOLUCIONADO:¿Cómo se escribe una función de PowerShell que se lee desde la entrada por canal?

Los siguientes son los ejemplos más simples de funciones/scripts que utilizan entrada por canal. Cada uno se comporta igual que la canalización al cmdlet "echo".

como funciones:

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 
    } 
} 

Como 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 
} 

P. ej

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 

Respuesta

12

También tienen la opción de utilizar las funciones avanzadas, en lugar del enfoque básico anterior:

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

    # do something with $piped 
} 

Debería ser obvio que sólo un parámetro se puede enlazar directamente a la entrada de tuberías. Sin embargo, puede tener varios parámetros se unen a diferentes propiedades en la tubería de entrada:

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

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

    # do something with $prop1 and $prop2 
} 

la esperanza que esto le ayuda en su viaje para aprender otra línea de comandos.

Cuestiones relacionadas