2016-10-27 2 views
1

Ich muss die Powershell-Datei test.ps1 aus test1.ps1 ausführen. Ich benutze Start-Job-Funktion der Powershell. In meinem test1.ps1 habe ichFehler beim Starten eines Powershell-Jobs mit Skriptblock und Argumentliste

$pathToFile = (Join-Path -Path $PSSCriptRoot -ChildPath "test.ps1") 
$ar = $a, $b # all these variables have values assigned 
Start-Job -Name job2 -ScriptBlock{& $pathToFile -fName $args[0] -lName $args[1]} -ArgumentList $ar 

In meinem test.ps1 habe ich fName und lName als Parameter wie:

param([string]fName, [string]lName] 

halte ich die folgende Fehlermeldung erhalten:

The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command name, a script block, or a CommandInfo object.

Das Problem ist hier Start-Job -Name job2 -ScriptBlock{& $pathToFile -fName $args[0] -lName $args[1]} -ArgumentList $ar

Aber ich finde nicht die Lösung, um dieses Problem zu lösen.Und Ja, ich habe überprüft, dass $ pathToFile den genauen Pfad zu test.ps1 => C: \ foo \ test.ps1 enthält Danke für jede Hilfe oder Anregung.

Antwort

-1

Haben Sie das Cmdlet invoke-expression versucht? Dies ist, was ich normalerweise verwende.

Invoke-Expression [-Command] []

+0

Dies hat wenig mit der Frage des OP zu tun, die darauf hinausläuft, dass eine lokale Variable nicht definiert wird, wenn sie im Kontext eines Jobs ausgeführt wird. – mklement0

1

Nach einigen Stunden der Forschung, habe ich es endlich arbeiten.

Die Lösung ist $using:pathToFile zu verwenden.

Anstatt also

Start-Job -Name job2 -ScriptBlock{& $pathToFile -fName $args[0] -lName $args[1]} -ArgumentList $ar 

die Lösung verwendet, ist diese verwenden:

Start-Job -Name job2 -ScriptBlock{& $using:pathToFile -fName $args[0] -lName $args[1]} -ArgumentList $ar 

Ich hoffe, das andere Leute helfen.

Verwandte Themen