You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多服务器停机时间脚本仅执行本地,请求技术协助

多服务器停机时间统计脚本修复方案

你的现有代码存在两个核心问题:

  1. ForEach循环体为空(大括号{}内无执行逻辑),等于没对目标服务器做任何操作
  2. 未指定远程执行上下文,$TotalDownTime默认只会读取本地主机的信息

修复后的脚本示例

使用CIM(推荐替代WMI的远程管理方式)获取多服务器停机/运行时长,代码如下:

$ServerList = 'srv01','srv02'
$Results = @()

ForEach ($Server in $ServerList) {
    try {
        # 远程获取目标服务器的系统运行信息
        $osData = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $Server -ErrorAction Stop
        $uptime = (Get-Date) - $osData.LastBootUpTime
        
        # 整理统计数据
        $stat = [PSCustomObject]@{
            ServerName   = $Server
            LastBootTime = $osData.LastBootUpTime
            UptimeDays   = [math]::Round($uptime.TotalDays, 2)
            UptimeHours  = [math]::Round($uptime.TotalHours, 2)
        }
        $Results += $stat
    }
    catch {
        # 捕获连接失败的异常,记录错误信息
        $errorStat = [PSCustomObject]@{
            ServerName   = $Server
            ErrorMessage = "连接失败:$($_.Exception.Message)"
        }
        $Results += $errorStat
    }
}

# 输出所有服务器的统计结果
$Results | Format-Table -AutoSize

关键说明

  • Get-CimInstance -ComputerName $Server是让脚本作用于远程服务器的核心,明确指定了目标主机
  • 加入try/catch块处理远程连接失败的情况,避免脚本中断
  • 将结果统一存入数组后输出,便于批量查看所有服务器状态

前置要求

  • 执行脚本的账号需拥有目标服务器的管理员权限
  • 目标服务器已开启WinRM服务(PowerShell远程管理的基础服务)
  • 网络允许目标服务器的5985(HTTP)或5986(HTTPS)端口通信

内容的提问来源于stack exchange,提问作者Dhonovan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:55:18