You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过PowerShell获取电脑首次系统安装日期及使用年限并导出为CSV/Excel文件

解决设备年限统计与导出需求的PowerShell方案

我帮你调整代码,既能准确获取首次系统安装日期,又能导出成CSV(Excel可直接打开)格式的报告。咱们一步步来优化:

核心问题分析

你当前的注册表查询会返回Windows升级的所有历史记录,所以需要从中筛选出最早的那条记录作为首次安装日期;另外,Get-WmiObject已经被微软标记为过时,推荐用更高效的Get-CimInstance替代。

完整优化代码

# 获取核心硬件信息
$computerName = $env:COMPUTERNAME
$computerSystem = Get-CimInstance -Class Win32_ComputerSystem
$manufacturer = $computerSystem.Manufacturer
$model = $computerSystem.Model

# 获取首次系统安装日期(从注册表筛选最早的记录)
$osInstallRecords = @(
    Get-ChildItem -Path HKLM:\System\Setup\Source* | ForEach-Object { Get-ItemProperty -Path Registry::$_ },
    Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion'
)
$firstInstallDate = ($osInstallRecords | Select-Object @{
    Name = 'InstallDate'
    Expression = { [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($_.InstallDate)) }
} | Sort-Object InstallDate | Select-Object -First 1).InstallDate

# 计算基于首次安装日期的使用年限(保留两位小数更易读)
$ageInYears = [math]::Round((New-TimeSpan -Start $firstInstallDate -End (Get-Date)).TotalDays / 365, 2)

# 整理成标准化对象
$deviceReport = [PSCustomObject]@{
    '电脑名称' = $computerName
    '制造商' = $manufacturer
    '型号' = $model
    '首次系统安装日期' = $firstInstallDate
    '使用年限(年)' = $ageInYears
}

# 输出到控制台预览
$deviceReport

# 导出为CSV文件(Excel可直接打开,指定UTF8避免乱码)
$deviceReport | Export-Csv -Path "C:\DeviceAgingReport.csv" -NoTypeInformation -Encoding UTF8

代码说明

  1. 硬件信息获取:用Get-CimInstance替代Get-WmiObject,兼容性和性能更好,稳定获取电脑名称、制造商、型号。
  2. 首次安装日期筛选:从注册表的Windows升级记录中提取所有安装时间,排序后取第一条(最早的)作为首次安装日期,解决了之前多记录的问题。
  3. 年限计算:用TotalDays替代Days计算更精确,加上[math]::Round保留两位小数,结果更直观易读。
  4. 导出CSVExport-Csv是PowerShell原生命令,生成的文件可以直接用Excel打开;-Encoding UTF8解决中文乱码问题,-NoTypeInformation去掉多余的类型头,让文件更简洁。

扩展说明

如果需要统计多台设备,可以把代码改成循环遍历设备列表的形式(需要目标设备开启WinRM):

$deviceList = @("WS0***MH", "PC001", "PC002")
$allReports = foreach ($device in $deviceList) {
    $computerSystem = Get-CimInstance -Class Win32_ComputerSystem -ComputerName $device
    # 其余逻辑和单设备代码一致,注意远程注册表访问的权限配置
}
$allReports | Export-Csv -Path "C:\AllDeviceAgingReport.csv" -NoTypeInformation -Encoding UTF8

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

火山引擎 最新活动