Pregunta

Estamos tratando de crear una matriz con variables y luego pasar esta matriz tan expandida a un script, que se ejecutará por trabajo de inicio.Pero en realidad falla y no podemos encontrar la razón.Tal vez alguien pueda ayudar!?

$arguments= @()
$arguments+= ("-Name", '$config.Name')
$arguments+= ("-Account", '$config.Account')
$arguments+= ("-Location", '$config.Location')

#do some nasty things with $config

Start-Job -ScriptBlock ([scriptblock]::create("& .'$ScriptPath' [string]$arguments")) -Name "Test"

no falla con

Cannot validate argument on parameter 'Name'. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
    + CategoryInfo          : InvalidData: (:) [Select-AzureSubscription], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.WindowsAzure.Commands.Profile.SelectAzureSubscriptionCommand
    + PSComputerName        : localhost

Aunque $ CONFIG.NAME está configurado correctamente.

¿Alguna idea?

¡Gracias de antemano!

¿Fue útil?

Solución

Utilizo este método para pasar los parámetros con nombre:

$arguments = 
@{
   Name     = $config.Name
   Account  = $config.Account
   Location = $config.Location
}

#do some nasty things with $config

Start-Job -ScriptBlock ([scriptblock]::create("&'$ScriptPath'  $(&{$args}@arguments)")) -Name "Test"

Le permite usar el mismo parámetro HASH que usaría para splat en el script si lo estaba ejecutando localmente.

este bit de código:

$(&{$args}@arguments)

incrustado en la cadena expandible creará el parámetro: pares de valor para los argumentos:

$config = @{Name='configName';Account='confgAccount';Location='configLocation'}
$arguments = 
@{
   Name     = $config.Name
   Account  = $config.Account
   Location = $config.Location
}

"$(&{$args}@arguments)"

-Account: confgAccount -Name: configName -Location: configLocation

Otros consejos

La única cotización es el símbolo de la cadena literal, está configurando el argumento "-Name" al código de cadena $config.Name, no Value of $config.Name.Para usar el valor, use lo siguiente:

$arguments= @()
$arguments+= ("-Name", $config.Name)
$arguments+= ("-Account", $config.Account)
$arguments+= ("-Location", $config.Location)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top