Variablen, die im Start-Job
Habe ich das powershell-code, die ich mag würde, um zu arbeiten. Es sind derzeit keine Bewertung der $agent-variable.
foreach($agent in $agentcomputers){
Write-Output 'Starting agent on '$agent
#psexc to start the agent
Start-Job -ScriptBlock {& psexec $agent c:\grinder\examples\startAgent.cmd}
}
Dieser sieht ähnlich aus wie mein problem, außer das ich nicht den Aufruf eines externen powershell-Skript.
https://sqlblog.org/2011/01/29/powershell-start-job-scriptblock-sad-panda-face
Ich habe versucht, das hinzufügen, dass, mit $args[0] für $agent und hinzufügen der-ArgumentList-Parameter, aber das hat nicht funktioniert.
Vielen Dank für jede Hilfe können Sie zur Verfügung stellen.
Bearbeitungen/Replys...
Dies ist $agentcomputers, nur eine Liste der computer-Namen. Jede auf einer eigenen Zeile.
$agentcomputers = Get-Content c:\grinder-dist\agent-computers.txt
Habe ich auch schon versucht - und das $args[0] nicht bewerten
Start-Job -ScriptBlock {& psexec $args[0] c:\grinder\examples\startAgent.cmd} -ArgumentList @($agent)
$agent
?Sie müssen den ArgumentList-parameter entweder über die
$args
array oder ein param-block.Sie könnte auch den Umfang Ihrer Dollar-agent-variable, denke ich: $global:agent.
die Globale Reichweite wird nicht funktionieren, da es ausgeführt wird, in einem separaten PowerShell.exe Prozess. Die Daten serialisiert und an den Prozess im hintergrund.
Möglicherweise müssen backslashes entsprechend psexec-s Dokumentation
"\\$args[0]"
. Stellen Sie sicher, dass der Befehl funktioniert selbst, ohne ein hintergrund-job.InformationsquelleAutor Sam | 2012-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier sind 3 verschiedene Möglichkeiten, ich würde es tun.
Erste, alle ausgerichtet und hübsch.
Oder Sie können einfach legen Sie Sie alle auf einer Linie, ohne die Erstellung von beliebigen Variablen.
Und in diesem letzten Beispiel könnten Sie verwalten, wie viele threads gleichzeitig ausgeführt werden, indem Sie es auf diese Weise.
InformationsquelleAutor T.CK
Hier ist die Lösung. Wie Andy sagte, ich brauchte, um $args-array mit den -ArgumentList-parameter. In diesem anderen thread war hilfreich: Powershell: übergabe von Parametern an einen job
InformationsquelleAutor Sam