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

如何用PowerShell获取Windows最后更新日期并解决解析异常

解决PowerShell获取Windows最后更新日期的问题

问题原因分析

你遇到的String was not recognized as a valid DateTime错误,是因为部分机器上Get-HotFix返回的InstalledOn属性是无法被PowerShell解析为有效日期的字符串(可能由系统区域设置差异、热修复元数据损坏导致)。同时默认返回的日期会包含时间部分,需要格式化处理。

解决方案1:修复Get-HotFix的错误处理与日期格式化

通过过滤掉无法解析的日期条目,再对有效日期排序并格式化:

# 获取所有热修复,过滤掉InstalledOn无效的条目
$有效热修复 = Get-HotFix | Where-Object {
    try {
        [DateTime]$_.InstalledOn | Out-Null
        $true
    } catch {
        $false
    }
}

if ($有效热修复) {
    # 获取最新的安装日期并格式化为仅日期部分
    $最后更新日期 = $有效热修复 | Sort-Object InstalledOn | Select-Object -Last 1 -ExpandProperty InstalledOn
    $格式化日期 = $最后更新日期.ToString('yyyy-MM-dd') # 可根据需求改为'MM/dd/yyyy'等格式
    Write-Output $格式化日期
} else {
    Write-Output "未找到有效的更新日期记录"
}

解决方案2:使用更可靠的Windows Update历史记录

如果Get-HotFix的结果不够准确,可通过Windows Update Agent COM对象获取官方更新历史,此方法能覆盖更多类型的更新(如累积更新):

try {
    $更新会话 = New-Object -ComObject Microsoft.Update.Session
    $更新搜索器 = $更新会话.CreateUpdateSearcher()
    $历史记录总数 = $更新搜索器.GetTotalHistoryCount()
    
    # 查询所有更新历史,筛选成功安装的条目并取最新一条
    $最新成功更新 = $更新搜索器.QueryHistory(0, $历史记录总数) | Where-Object {
        $_.ResultCode -eq 2 # ResultCode=2表示安装成功
    } | Sort-Object Date -Descending | Select-Object -First 1

    if ($最新成功更新) {
        $格式化日期 = $最新成功更新.Date.ToString('yyyy-MM-dd')
        Write-Output $格式化日期
    } else {
        Write-Output "未找到成功的更新历史记录"
    }
} catch {
    Write-Output "获取更新历史时出错: $_"
}

关键说明

  • 日期格式化:ToString('yyyy-MM-dd')会生成类似2024-05-20的纯日期字符串,可根据你的UI需求调整格式(如'yyyy年MM月dd日')。
  • 错误处理:两种方案都加入了异常捕获,避免因个别无效记录导致整个脚本崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:40:23