远程重启与回线确认
远程重启看起来只是一条命令,真正的功夫在「重启之后」:机器是否回来了、有没有真的重启过、关键服务是否恢复、业务端口是否重新监听。补丁后批量重启、坏机强重启都属于高风险操作,因为一旦机器没回来,就只能去机房或带外管理界面处理。把「发出重启」和「确认回线」当成一个完整动作,是运维脚本最基本的要求。
基本信息
| 适用平台 | Windows 7/10/11 与 Windows Server |
|---|---|
| PowerShell | Restart-Computer -ComputerName 主机 -Force;可加 -Wait 等待恢复、-Timeout 限制等待时长 |
| 传统命令 | shutdown /m \\主机 /r /t 0 /f;/d 记录重启原因,/c 添加注释 |
| 回线检测 | 轮询 Test-Connection / Test-NetConnection 判断可达性 |
| 有效性确认 | 比对系统启动时间,证明确实完成了一次重启 |
| 权限要求 | 需要目标机管理员权限;传统命令依赖远程 RPC 与相应防火墙规则 |
典型使用场景
- 补丁窗口:批量重启一批服务器,逐台确认回线再继续下一台
- 故障恢复:服务僵死或驱动异常时远程强制重启
- 配置生效:部分系统设置需要重启后应用
- 计划维护:按批次滚动重启集群或应用节点,保持服务可用
- 结果留档:输出每台机器的回线时间与是否真的重启,作为变更证据
常用示例
常用示例
# 通知在线用户后重启(/c 添加说明,/d 记录原因)
# shutdown /m \\web01 /r /t 60 /c "补丁窗口重启,请保存工作"
Restart-Computer -ComputerName web01 -Force -Confirm:$false # 立即强制重启
Restart-Computer -ComputerName web01 -Force -Wait -For PowerShell -Timeout 300 # 等待恢复,最多等 5 分钟
# 传统命令(无 PSRemoting 时)
shutdown /m \\web01 /r /t 0 /f
# 回线轮询:等可达
while (-not (Test-Connection web01 -Count 1 -Quiet)) { Start-Sleep -Seconds 5 }
# 逐项确认
Test-NetConnection web01 -Port 3389 # 远程桌面端口是否恢复
(Get-CimInstance Win32_OperatingSystem -ComputerName web01).LastBootUpTime # 确认启动时间已更新
Get-Service -ComputerName web01 -Name W3SVC | Select-Object Name, Status # 关键服务状态重启方式与确认手段
| 环节 | 做法 | 注意 |
|---|---|---|
| 发出重启 | Restart-Computer 或 shutdown /m | shutdown 依赖远程 RPC 与防火墙规则,跨网段常被拦 |
| 强制程度 | -Force 或 /f | 不给用户保存机会,务必提前通知 |
| 等待恢复 | -Wait -For PowerShell -Timeout | 仅表示远程管理通道恢复,不代表业务恢复 |
| 可达性确认 | Test-Connection 轮询 | ping 通不代表服务就绪 |
| 重启有效性 | 比对 LastBootUpTime | 防止「其实没重启,只是网络恢复了」的误判 |
| 业务确认 | 端口探测与服务状态 | 最终以业务指标为准,服务名按环境替换 |
确认回线要分两层:网络可达(能 ping 通)和业务就绪(服务运行、端口监听)。只做前者在应用服务器上很容易得出错误结论——机器起来了但服务起不来,用户依然是不可用状态。
shutdown /m 走的是远程 RPC 与相关防火墙规则,很多加固环境默认拦截跨网段调用;这类环境优先用远程管理通道执行重启,或通过配置管理工具统一下发。
批量滚动重启
批量滚动重启
$hosts = 'app01','app02','app03'
$result = foreach ($h in $hosts) {
$boot = (Get-CimInstance Win32_OperatingSystem -ComputerName $h -ErrorAction SilentlyContinue).LastBootUpTime
Restart-Computer -ComputerName $h -Force -Confirm:$false -ErrorAction SilentlyContinue
Start-Sleep -Seconds 10
$ok = $false
for ($i = 0; $i -lt 60; $i++) { # 最多等 5 分钟
if (Test-Connection $h -Count 1 -Quiet) { $ok = $true; break }
Start-Sleep -Seconds 5
}
[PSCustomObject]@{
Host = $h; Reachable = $ok; BootBefore = $boot
BootAfter = (Get-CimInstance Win32_OperatingSystem -ComputerName $h -ErrorAction SilentlyContinue).LastBootUpTime
}
}
$result | Export-Csv D:\ops\reboot_20261013.csv -Encoding UTF8 -NoTypeInformation域控、集群节点与数据库服务器重启前必须确认依赖与主备状态:直接重启可能触发仲裁失败、复制异常或业务中断。此类操作一律走变更窗口,并提前准备带外管理通道以便机器未回线时介入。