2016-06-29 5 views
0

Es gibt bereits einige Fragen darüber, wie mit den Argumenten von einer anderen PS-Skript nennen wie, dass man Powershell: how to invoke a second script with arguments from a scriptPowershell-Skript aus einem anderen Skript mit mehreren Positionsargumente

Aber ich bin fest, falls ich mit mehreren ersten Skript Positionsparameter.

testpar2.ps1 testpars.ps1

#$arglist=(some call to database to return argument_string) 

$arglist="first_argument second_argument third_argument" 

$cmd=".\testpars.ps1" 

& $cmd $arglist 

$ arglist Variable ruft sollten mit Zeichenfolge aus der Datenbank gefüllt. Diese Zeichenfolge enthält Argumente für testpar.ps1.

testpars.ps1 sieht aus wie

echo argument1 is $args[0] 
echo argument2 is $args[1] 
echo arugment3 is $args[3] 

# some_command_call $arg[0] $arg[1] $arg[2] 

Diese Argumente in testpars.ps1 in irgendeiner Weise verwendet werden soll, wie zum Weg sie bis zu einem gewissen Befehl.

Aber wenn ich laufen testpars2.ps1 ich habe

argument1 is first_argument second_argument third argument 
argument2 is 
arugment3 is 

Es denkt, dass es ein Argument, nicht eine Liste von ihnen.

+0

'Echo arugment3 ist $ args [3]' Meinten Sie '$ args [2]'? –

Antwort

1

Wie Sie sehen, wenn Sie eine Zeichenfolge an eine Funktion übergeben, behandelt PowerShell das als einen einzelnen Wert. Das ist normalerweise gut, weil es das Problem in CMD vermeidet, Strings ständig zu quotieren und aufzulösen. Um separate Werte zu erhalten, müssen Sie split() die Zeichenfolge in ein Array.

Jetzt haben Sie ein Array von drei Strings, aber sie sind immer noch alle als ein Parameter übergeben. PowerShell hat eine Idee, die als splatting bekannt ist, um ein Array von Werten als mehrere Argumente zu übergeben. Um Splatting zu verwenden, ersetzen Sie die $ durch @ in der Argumentliste.

& $cmd @arglistArray 

Für weitere Informationen über splatting Typ Get-Help about_Splatting

Verwandte Themen