Pergunta

Estamos tentando criar uma matriz com as variáveis e, em seguida, passar a matriz ampliada de um script, que deve ser executado por Iniciar o Trabalho.Mas, na verdade, ele falha e somos incapazes de encontrar a razão.Talvez alguém possa ajudar!?

$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"

Ele falha com

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

Apesar $config.o nome é definido corretamente.

Qualquer idéias?

Obrigado antecipadamente!

Foi útil?

Solução

Eu uso esse método para a passagem de parâmetros nomeados:

$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"

Ele permite que você use o mesmo parâmetro de hash que você usaria para splat para o script se você estivesse executando localmente.

Essa parte do código:

$(&{$args}@arguments)

incorporado na cadeia de caracteres expansível vai criar o Parâmetro:Os pares de valores para os 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

Outras dicas

A única citação literal de seqüência de caracteres de símbolo, você está definindo o "Nome" argumento para a cadeia $config.Name não Value of $config.Name.Para usar o valor, use a seguinte:

$arguments= @()
$arguments+= ("-Name", $config.Name)
$arguments+= ("-Account", $config.Account)
$arguments+= ("-Location", $config.Location)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top