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

如何在PowerShell脚本中传递服务器参数以获取服务器运行时间?

问题分析

原脚本存在两个核心错误:

  1. 混淆了服务名称与服务器名称:Win32_Service的Name字段是Windows服务的内部标识(如TermService),而非目标服务器的名称,传入服务器名OURSERVER必然无法获取到有效服务实例。
  2. 获取服务器运行时间的路径错误:通过服务关联进程计算的是单个服务进程的运行时长,并非服务器系统的整体运行时间。
正确实现方案

要获取本地或远程服务器的系统运行时间,直接查询Win32_OperatingSystem类即可,该类的LastBootUpTime属性记录了系统上次启动时间,用当前时间减去该值就能得到准确的运行时长。

修正后的脚本

function Get-ServerUptime {
    param (
        # 指定目标服务器名称,留空默认查询本地服务器
        [string]$ComputerName = $env:COMPUTERNAME
    )

    try {
        # 获取操作系统启动信息
        $osInfo = Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $ComputerName -ErrorAction Stop
        # 计算运行时长
        $uptime = (Get-Date) - $osInfo.LastBootUpTime
        # 返回结构化结果
        return [PSCustomObject]@{
            ServerName = $ComputerName
            Uptime     = $uptime
            LastBoot   = $osInfo.LastBootUpTime
        }
    }
    catch {
        Write-Error "无法连接到服务器 $ComputerName : $_"
        return $null
    }
}

# 使用示例:查询远程服务器OURSERVER的运行时间
$serverUptime = Get-ServerUptime -ComputerName "OURSERVER"

if ($serverUptime) {
    Write-Host "`n服务器 $($serverUptime.ServerName) 运行信息:"
    Write-Host "上次启动时间:$($serverUptime.LastBoot)"
    Write-Host "已运行时长:$($serverUptime.Uptime.Days)天 $($serverUptime.Uptime.Hours)小时 $($serverUptime.Uptime.Minutes)分钟"
}

关键说明

  • 服务器参数传递:直接传入服务器名OURSERVER即可,无需添加反斜杠;如果查询本地服务器,可省略-ComputerName参数。
  • 权限要求:运行脚本的用户需拥有目标服务器的WMI/CIM访问权限,通常以管理员身份启动PowerShell即可满足。
  • 异常处理:脚本加入了try/catch块,可捕获连接失败、权限不足等异常,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:55:13