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

PowerShell脚本问题:如何将无响应服务器纳入开机时间查询结果

解决PowerShell脚本无法显示无响应服务器的问题

我明白你的痛点——现在脚本只展示能正常查询的服务器,那些因为WMI问题或者网络不通的服务器只在控制台报错,完全没出现在结果视图里,这确实让结果的实用性大打折扣。咱们可以通过添加错误捕获与处理逻辑,把这些失败的服务器信息也统一收集起来,一起展示在网格视图里。

下面是修改后的完整脚本:

# 定义服务器列表
$servers = ('serverx', 'servery', 'serverz') # 替换成你的服务器列表

# 初始化空数组,用于存储所有结果(成功+失败)
$results = @()

foreach ($server in $servers) {
    try {
        # 强制将错误转为终止错误,以便被catch捕获
        $osInfo = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $server -ErrorAction Stop -OperationTimeoutSec 5
        
        # 计算上次开机时间(转换为易读格式)
        $lastBootTime = $osInfo.LastBootUpTime
        $uptime = (Get-Date) - $lastBootTime
        
        # 创建成功结果对象
        $resultObj = [PSCustomObject]@{
            ServerName     = $server
            LastBootUpTime = $lastBootTime.ToString('yyyy-MM-dd HH:mm:ss')
            Uptime         = "$($uptime.Days)天 $($uptime.Hours)小时 $($uptime.Minutes)分钟"
            Status         = "成功"
            ErrorMessage   = $null
        }
    }
    catch {
        # 创建失败结果对象,捕获错误信息
        $resultObj = [PSCustomObject]@{
            ServerName     = $server
            LastBootUpTime = $null
            Uptime         = $null
            Status         = "失败"
            ErrorMessage   = $_.Exception.Message
        }
    }
    # 将结果加入数组
    $results += $resultObj
}

# 将所有结果输出到网格视图
$results | Out-GridView -Title "服务器开机时间查询结果"

关键修改点说明:

  • 错误捕获逻辑:使用try/catch块包裹查询代码,并且添加-ErrorAction Stop参数——默认情况下Get-CimInstance的错误是非终止错误,不会触发catch,这个参数能把错误转为终止错误,让我们可以捕获并处理。
  • 统一结果收集:不管查询成功还是失败,都创建一个包含相同字段的自定义对象,这样网格视图里的列是统一的,便于查看对比。
  • 超时优化:添加-OperationTimeoutSec 5参数,把每个服务器的查询超时时间设为5秒,避免无响应时脚本长时间停顿。
  • 状态与错误标注:新增Status和ErrorMessage字段,明确标记服务器的查询状态,失败时还能看到具体的错误原因(比如WMI未运行、无法连接等)。

这样修改后,所有服务器的状态都会清晰地展示在网格视图里,你一眼就能看到哪些服务器正常,哪些出了问题,还能知道具体原因,实用性大幅提升!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:46:10