Domanda

Stiamo cercando di creare un array con variabili e quindi passare questo array come espanso a uno script, che deve essere gestito da inizio-lavoro.Ma in realtà fallisce e non siamo in grado di trovare la ragione.Forse qualcuno può aiutare!?

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

fallisce 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
.

Anche se $ config.name è impostato correttamente.

Qualche idea?

Grazie in anticipo!

È stato utile?

Soluzione

Io uso questo metodo per il passaggio dei parametri denominati:

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

Ti consente di utilizzare lo stesso parametro che usi da usare sullo script se lo stavi eseguendo localmente.

Questo bit del codice:

$(&{$args}@arguments)
.

Incorporato nella stringa espandibile creerà il parametro: Valore Paia per gli argomenti:

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

Altri suggerimenti

La citazione singola è il simbolo della stringa letterale, si imposta l'argomento "-Name" nella stringa $config.Name non Value of $config.Name.Per utilizzare il valore, utilizzare quanto segue:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top