Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 返回成功,然后重新启动计算机_Powershell_Jenkins - Fatal编程技术网

Powershell 返回成功,然后重新启动计算机

Powershell 返回成功,然后重新启动计算机,powershell,jenkins,Powershell,Jenkins,我正在将Jenkins与一些东西集成,我使用powershell来实现这一点。我在远程机器上有一个脚本,在jenkins上成功构建后执行。这个脚本执行了一系列操作,然后将重新启动机器 我需要做的是: 返回jenkins,告诉他脚本成功了(意味着它将以成功结束工作) 然后重新启动机器 到目前为止,我还没有将“出口0”发送给jenkins,然后重新启动计算机。还有其他办法吗 提前谢谢 代码示例: Write-Host "Code example" Exit 0 #for jenkins succes

我正在将Jenkins与一些东西集成,我使用powershell来实现这一点。我在远程机器上有一个脚本,在jenkins上成功构建后执行。这个脚本执行了一系列操作,然后将重新启动机器

我需要做的是:

  • 返回jenkins,告诉他脚本成功了(意味着它将以成功结束工作)
  • 然后重新启动机器
  • 到目前为止,我还没有将“出口0”发送给jenkins,然后重新启动计算机。还有其他办法吗

    提前谢谢

    代码示例:

    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