如何远程重新启动服务器并确保它已启动

问题描述:

我有一个简单的远程重新启动服务器代码。我正在使用Invoke Command在另一个服务器上执行脚本块。问题是如何重新启动此服务器,并确保在重新启动后,它是如何远程重新启动服务器并确保它已启动

我知道invoke命令会打开会话,但重启后会关闭。如何绕过这个问题?

代码

 try { 
     $RestartResult = Invoke-Command -ComputerName $AppServer -ScriptBlock 
     { 
      Write-EventLog –LogName Application –Source "Powershell restart script" –EntryType Information –Message "Server restart initiated" 
      Restart-Computer -Wait -For WMI -ea Stop -Delay 30 
     } 
    } 
    catch { 
     # Get the exception message. 
     $RestartResult = $_.Exception.Message 
    } 

    if ($error) { 
     Write-Log ERROR -Message $RestartResult 
    } 
    else { 
     Write-Log INFO -Message 'Host $AppServer has been restarted' 
    } 
+0

一旦您的脚本执行了重新启动,您可以尝试另一个尝试重新连接的{} catch {} - 如果成功,您知道服务器已备份。 –

+0

取决于“结束”的含义。有时候ping就够了。有时你必须确定一些服务正在运行... – fdafadf

+0

我只想检查是否可以在此主机上建立PowerShell会话,假设我想尝试在$ hostname服务器上执行如下操作: Invoke-Command -ComputerName $ hostname -ScriptBlock {1} 如果它可以被使用,我想尝试2次以上,直到可能或计数器尝试显示3 – Ozzy

您可以使用这些代码来检查,如果你的服务器刚刚重新启动

检查正常运行时间
Get-CimInstance -ClassName win32_operatingsystem | select csname, lastbootuptime 

参考链接:https://blogs.technet.microsoft.com/heyscriptingguy/2013/03/27/powertip-get-the-last-boot-time-with-powershell/

我这是怎么发出重启Restart-Server.ps1这就是我如何在内部测试它的正常运行时间 Test-Server.ps1阻止执行,直到它准备好。并不是说我真的检查了PowerShell的远程处理是可能的,这可以保证我的服务器的操作系统不仅仅是简单的启动。

Restart-Computer -ComputerName <ConmputerName> -Wait 

将重新启动并等待远程主机上的PowerShell默认端点出现。