【问题标题】:How to restart server remotely and be sure that it's up如何远程重启服务器并确保它已启动
【发布时间】:2017-09-01 12:07:53
【问题描述】:

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

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

代码

        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'
    }

【问题讨论】:

  • 一旦您的脚本执行了重新启动,您可以再尝试一次尝试重新连接的尝试{}catch{} - 如果成功,则您知道服务器已备份。
  • 取决于“已启动”的含义。有时 ping 就足够了。有时您必须确保某些服务正在运行...
  • 我只是想检查我是否可以在此主机上建立 powershell 会话,假设我想尝试在 $hostname 服务器上执行类似的操作: Invoke-Command -ComputerName $hostname -ScriptBlock { 1 } 如果不可能,我想再试 2 次,直到有可能或尝试计数器显示 3

标签: windows powershell server powershell-3.0


【解决方案1】:

您可以使用这些代码检查正常运行时间,以检查您的服务器是否刚刚重新启动

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/

【讨论】:

    【解决方案2】:

    这是我发出重启Restart-Server.ps1 的方式,也是我内部测试其正常运行时间的方式 Test-Server.ps1 阻止执行,直到它准备好。并不是说我实际上检查了 powershell 远程处理是可能的,这保证了我服务器的操作系统不仅仅是简单的启动。

    【讨论】:

      【解决方案3】:
      Restart-Computer -ComputerName <ConmputerName> -Wait
      

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

      【讨论】:

        猜你喜欢
        • 2013-08-26
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        相关资源
        最近更新 更多