Question

Nous essayons de créer un tableau avec des variables, puis de transmettre ce tableau tel qu'il est développé à un script, qui sera exécuté par Start-Job.Mais en réalité, cela échoue et nous ne parvenons pas à en trouver la raison.Peut-être que quelqu'un peut aider !?

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

Cela échoue avec

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

Même si $config.name est défini correctement.

Des idées?

Merci d'avance!

Était-ce utile?

La solution

J'utilise cette méthode pour passer des paramètres nommés:

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

Il vous permet d'utiliser le même hachage de paramètres que vous utiliseriez pour écaillir au script si vous l'exécutez localement.

Ce bit de code:

$(&{$args}@arguments)

Embedded dans la chaîne extensible créera le paramètre: Valeur paires pour les arguments:

$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

Autres conseils

Le guillemet simple est le symbole de chaîne littérale, vous définissez l'argument "-Name" sur la chaîne $config.Name pas Value of $config.Name.Pour utiliser la valeur, utilisez ce qui suit :

$arguments= @()
$arguments+= ("-Name", $config.Name)
$arguments+= ("-Account", $config.Account)
$arguments+= ("-Location", $config.Location)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top