2009-08-05 13 views
10

Estoy seguro de haber leído en alguna parte que hay una manera fácil de pasar parámetros nombrados de una función de llamada a una función llamada sin nombrar y especificar explícitamente cada parámetro.¿Existe una manera simple de pasar parámetros específicos de * named * PowerShell directamente a una función llamada?

Esto es más que simplemente reutilizar la posición; Me interesa el caso en el que el nombre de los parámetros pasados ​​es el mismo en algunos casos, pero no en otros.

También creo que hay una manera que no depende de la posición.

function called-func { 
    param([string]$foo, [string]$baz, [string]$bar) 
    write-debug $baz 
    write-host $foo,$bar 
} 

function calling-func { 
    param([int]$rep = 1, [string]$foo, [string]$bar) 
    1..$rep | %{ 
     called-func -foo $foo -bar $bar -baz $rep ## <---- Should this be simpler? 
    } 
} 

calling-func -rep 10 -foo "Hello" -bar "World" 

¿Cuál sería el método, y hay un enlace?

Pensé que podría haber sido Jeffrey Snover, pero no estoy seguro.

+0

Hice * algún * Google primero, pero como no vi la respuesta aquí en SO, quería obtenerla aquí también de todos modos. –

+0

Así que después de buscar en Google, creo que la función en la que estaba pensando tenía que ver con 'splating' y pasar los parámetros del switch. Publicaré una respuesta después de obtener todos los detalles. –

Respuesta

5

Bart de Smet tiene una gran explicación del parámetro * splatting en Windows PowerShell 2.0 Feature Focus - Splat, Split and Join.

* Como siempre, si eres un geek de PowerShell, le debes un lugar en tu fuente RSS.

+1

nice. Esto parece específico de powershell v2 por cierto. –

+2

Correcto. En v1, la sintaxis de -param: $ value es lo mejor posible. –

1

¿Qué tal

called-func $foo $bar 
+0

Buena respuesta .. Voy a modificar la pregunta un poco para mostrar las diferencias ... –

2

Bueno, creo que estaba confundiendo un blog post que he leído sobre los parámetros del interruptor. Por lo que yo puedo decir la mejor manera es simplemente volver a utilizar los parámetros de este modo:

called-func -foo:$foo -bar:$bar 
+1

La sintaxis de dos puntos es necesaria cuando 'foo' es un parámetro de cambio. Si pasa '-foo $ foo',' called-func' creerá que está recibiendo dos argumentos (el interruptor 'foo' y un valor' $ foo'). –

+0

Sí, eso es correcto, gracias por señalarlo @emddudley –

3

En PowerShell v2 (que ciertamente es posible que no esté listo para pasar a aún) permite pasar a lo largo de los parámetros sin necesidad de conocer con anterioridad:

called-func $PSBoundParameters 

PSBoundParameters es un diccionario de todos los parámetros que realmente se proporcionaron a su función. Puede eliminar los parámetros que no desea (o agregar, supongo).

+0

Sí, no puedo esperar hasta que v2 entre en producción :) –

Cuestiones relacionadas