2012-06-22 18 views
8

Quiero llamar a un comando existente con un número dinámico de parámetros.¿Cómo pasar parámetros dinámicos en Powershell?

Así que en lugar de hacer esto (tomando write-host como ejemplo), me gustaría hacerlo de la manera más inteligente.

# these are the dynamic parameters which maybe get passed into my function or script 
# they would be $null be default of course 
$forecolor = 'Green' 
$newline = $true 

# now build the "dynamic" write-host... 
if ($forecolor) { 
    if ($newline) { 
     write-host -fore $forecolor "Hello world" 
    } 
    else { 
     write-host -fore $forecolor "Hello world" -nonewline 
    } 
} 
else { 
    if ($newline) { 
     write-host "Hello world" 
    } 
    else { 
     write-host "Hello world" -nonewline 
    } 
} 

Por supuesto, esto es muy feo. ¡Ayúdame a hacerlo más bonito!

Ya he probado sólo la creación de $forecolor = '-fore Green', que sólo produce la salida "-fore verde Hola mundo". Podría pensar en pasar una lista de argumentos a una función y para cada argumento en la lista agregar el parámetro correspondiente - Simplemente no sé cómo mantener los parámetros.

+0

¿Has echado un vistazo a los conjuntos de parámetros? http://blogs.technet.com/b/heyscriptingguy/archive/2011/06/30/use-parameter-sets-to-simplify-powershell-commands.aspx –

+0

David, ¿cómo ayudaría eso aquí? Estoy confundido. – Joey

Respuesta

16

Usted puede simplemente pasar sus variables como argumentos para Write-Host:

Write-Host -Fore $forecolor -NoNewLine:(!$newline) 'Hello World' 

Para una manera verdaderamente dinámica se puede utilizar una tabla hash:

$params = @{ NoNewLine = $true; ForegroundColor = 'Green' } 

y luego utilizar el operador splat

Write-Host @params Hello World 

Puede agregar parámetros y sus valores a la tabla hash como desee antes llamando al Write-Host de esa manera.

+4

** ¡Increíble! ** Aquí hay un artículo sobre splatting: http://technet.microsoft.com/en-us/magazine/gg675931.aspx nunca antes había escuchado de esa hechicería. Gracias. –

+0

He estado trabajando durante años con PowerShell y nunca he oído hablar de esto. Ahora finalmente, lo hice: ¡Gran característica! – AstralisSomnium

Cuestiones relacionadas