Powershell 返回成功,然后重新启动计算机
我正在将Jenkins与一些东西集成,我使用powershell来实现这一点。我在远程机器上有一个脚本,在jenkins上成功构建后执行。这个脚本执行了一系列操作,然后将重新启动机器 我需要做的是:Powershell 返回成功,然后重新启动计算机,powershell,jenkins,Powershell,Jenkins,我正在将Jenkins与一些东西集成,我使用powershell来实现这一点。我在远程机器上有一个脚本,在jenkins上成功构建后执行。这个脚本执行了一系列操作,然后将重新启动机器 我需要做的是: 返回jenkins,告诉他脚本成功了(意味着它将以成功结束工作) 然后重新启动机器 到目前为止,我还没有将“出口0”发送给jenkins,然后重新启动计算机。还有其他办法吗 提前谢谢 代码示例: Write-Host "Code example" Exit 0 #for jenkins succes
Write-Host "Code example"
Exit 0 #for jenkins success
Restart-Computer -Force
这将承载一个单独的命令提示符,该提示符从powershell脚本异步运行,并在3秒钟内重新启动计算机,足够powershell将退出代码返回给jenkins
Start-Process -FilePath "cmd.exe" -ArgumentList '/c "timeout /t 3 /nobreak && shutdown -r -f -t 0"' -WindowStyle Hidden
Exit 0
正如@Avshalom在评论中指出的,您的问题是
Exit
语句将无条件地退出您的脚本,而不会执行在它之后的Restart Computer
命令
重新启动计算机
,在本地执行时,始终是异步的,因此您的脚本将继续执行,至少会执行一段时间
因此,您可以尝试先调用重新启动计算机
,然后再调用退出0
:
Write-Host "Code example"
Restart-Computer -Force
exit 0 # for Jenkins success
然而,无法保证控制会及时返回Jenkins,Jenkins本身在关闭之前有时间处理成功退出
您可以通过一个单独的异步启动的PowerShell实例[1]来提高延迟的可能性,类似于中的方法:
然而,这仍然不是一个完全健壮的解决方案;一个完全稳健的解决方案需要改变您的方法:
- 让脚本仅指示成功,而不启动重新启动
- 让Jenkins测试成功,如果成功,调用另一个无条件启动关机的脚本
[1] 正如Evillcat指出的,使用带有
启动作业的后台作业不起作用,因为在使用退出退出调用PowerShell会话时,后台作业也会终止。在退出关键字后,脚本将不会传递到重新启动计算机部分
Write-Host "Code example"
# Asynchronously start a separate, hidden PowerShell instance
# that sleeps for 5 seconds before initiating the shutdown.
Start-Process -WindowStyle Hidden powershell.exe -Args '-command',
'Start-Sleep 5; Restart-Computer -Force'
exit 0 # for Jenkins success