2012-09-07 10 views
17

Tengo un script V2 PowerShell prueba que tiene este aspecto:

function test_args() 
    { 
     Write-Host "here's arg 0: $args[0]" 
     Write-Host "here's arg 1: $args[1]" 
    } 


    test_args 

Si llamo a esto desde el símbolo del sistema de PowerShell consigo esto en la pantalla:

here's arg[0]: [0] 

here's arg[1]: [1] 

No es exactamente lo que quería. Parece que tengo que copiar $ args [0] y $ args [1] a nuevas variables en el script antes de que pueda usarlas. Si hago eso, puedo acceder a las cosas bien.

¿Hay alguna manera de acceder a los $ args indexados en mi código? He intentado usar llaves para varios aspectos pero no tuve suerte.

Eventualmente me moveré a los parámetros con nombre, pero el script en el que estoy trabajando (no este demo) es un puerto directo de un archivo por lotes.

Respuesta

28

Tal vez puedas probar:

function test_args() 
{ 
    Write-Host "here's arg 0: $($args[0])" 
    Write-Host "here's arg 1: $($args[1])" 
} 

test_args foo bar 

en cuenta que es $args y no $arg. Además, cuando utiliza una variable de PowerShell en una cadena, PowerShell solo sustituye el valor de la variable. No puede usar directamente una expresión como $args[0]. Sin embargo, puede colocar la expresión dentro de un grupo de subexpresión $() dentro de una cadena de comillas dobles para que PowerShell evalúe la expresión y luego convierta el resultado en una cadena.

+0

Gracias Keith-- Cambié mi fragmento para corregir mi error al traducir de mi editor a SO. Supongo que mi pregunta es, ¿necesito pasar $ arg [0] y [1] a test_args como parámetros, o la función misma tendrá acceso a la matriz $ args? – larryq

+7

Las funciones siempre tienen acceso a $ args. Contendrá cualquier argumento que no se correlacione con un parámetro de función definido. Si no hay argumentos o todos los argumentos asignados a los parámetros de función, p. Ej. 'function foo ($ param1, $ param2) {}' luego $ args será una matriz vacía. –

+0

A veces tengo que usar 'Out-String' para que la salida de una sub-expresión se muestre como se desee ... como cuando se trabaja con una tabla hash. Ejemplo, supone que arg 1 es una tabla hash: 'Write-Host" aquí es arg 1: $ ($ args [1] | Out-String) "' – VertigoRay

Cuestiones relacionadas