我有一个 PowerShell 脚本,它使用 Powershell 工作流在多个远程服务器上同时运行许多 msdeploy。
一切正常,除了在每个“Foreach -Parallel”循环结束时,我得到这个异常:
Microsoft.PowerShell.Utility\Write-Error : The workflow was terminated by a Terminate activity.
At Execute-Bootstrapper:28 char:28
+
+ CategoryInfo : NotSpecified: (:) [Write-Error], WorkflowReturnException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Workflow.WorkflowReturnException,Microsoft.PowerShell.Commands.Writ
eErrorCommand
+ PSComputerName : [localhost]
我怎样才能解决这个问题 ?是否有结束工作流程的特定方法?
这是与并行执行相关的部分:
foreach -Parallel ($remoteHost in $selectedHosts) {
if($Env:FULL -eq "true") {
$process = Start-Process -PassThru -Wait -NoNewWindow "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" "xxx --full"
} else {
$process = Start-Process -PassThru -Wait -NoNewWindow "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" "xxx"
}
if($process.ExitCode -ne 0) {
Exit $process.ExitCode
}
}
谢谢你。
资料来源:工作流程:基础知识(在“嘿,脚本专家!博客”的工作和工作流程主文章下)。
以下部分注释的脚本可能会有所帮助。使用传递给的非常简单的参数进行测试
MSDeploy.exe
,使得-help -verb
有效,退出代码 = 0 而其他-help -brew
-help -bubu
不是,退出代码= -1 。-NoNewWindow
如果没有-RedirectStandardOutput
并且-RedirectStandardError
会引发以下错误(考虑完全省略-NoNewWindow
参数):上面的工作流返回一个哈希表数组(大致
hostname: exitcode
成对),因为一个简单的退出代码是不够的,因为输出顺序是随机的,因为它是并行运行的。输出: