Ich versuche, ein load-balanced Powershell-Veröffentlichungsskript zu schreiben und scheint einen Roadblock zu treffen. Die folgende foreach-Schleife wird einen Prozess zur Bereitstellung mithilfe von MSDeploy mit den Argumenten ausführen.Powershell startet einen Prozess innerhalb einer Schleife
foreach ($server in $ServersToDeploy) {
# Spin up a new process
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = $MSDeploy
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = $arguments
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
$p.WaitForExit()
$stdout = $p.StandardOutput.ReadToEnd()
$stderr = $p.StandardError.ReadToEnd()
# Output
if ($stderr) {
throw $stderr + ("Exit Code: " + $p.ExitCode)
}
Write-Host $stdout
}
Auf dem ersten Lauf, wird es das Skript, und führen MSDeploy mit den richtigen Argumenten laufen, aber Powershell würde auf unbestimmte Zeit warten, bis der erste Prozess, um zu beenden, scheint aber die Publish erfolgreich für beide Server ausgeführt zu haben, denn wenn Ich führe den Befehl erneut aus, der Prozess wird schnell und ordnungsgemäß für beide Server ohne Änderungen ausgeführt.
Das lässt mich denken, dass dies ein Timing-Problem sein könnte, denn wenn das Publish schnell durchläuft, scheint es zu funktionieren, aber wenn es langsam ist, hängt es an der ersten Iteration des Publish.
Sie haben mögliche Deadlock hier: '$ p.WaitForExit(); $ stdout = $ p.StandardOutput.ReadToEnd(); $ stderr = $ p.StandardError.ReadToEnd() '. – PetSerAl