Windows11下收集系统信息的脚本

2025年09月5日

原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/4775.html

我记得以前刚接触电脑的时候,那时候还是win98和winXP,我经常在电脑爱好者论坛 cfan.com.cn 上学习

因为很多网友的电脑系统很容易出现问题,经常会在论坛上询问

我爱人也是因为在这论坛上咨询了我电脑系统问题,我帮助她远程解决电脑问题后才认识的

那时候有些懂得编程的大佬会写一些小程序来获取系统的一些信息,例如 系统版本号、进程列表、服务列表、启动项目、软件安装列表…..

这样,有问题的网友在遇到问题的时候也可以很快的导出自己系统的一些信息,大佬们也可以快速的根据这些信息来分析系统故障的问题

# ===============================
# Windows 11 系统信息收集脚本
# 输出 Markdown 报告
# ===============================

# 报告文件带时间戳
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm-ss"
$outputFile = "C:\system_report_$timestamp.md"

# 清空文件
"" | Out-File -FilePath $outputFile -Encoding UTF8

# Markdown 标题
Add-Content $outputFile "# 📝 Windows 系统报告"
Add-Content $outputFile "`n生成时间: $(Get-Date)`n"

# ===============================
# 0. 系统信息
# ===============================
Add-Content $outputFile "## 🖥️ 系统信息"

$os = Get-CimInstance Win32_OperatingSystem
Add-Content $outputFile ("- 系统名称: **{0}**" -f $os.Caption)
Add-Content $outputFile ("- 版本: **{0}**" -f $os.Version)
Add-Content $outputFile ("- 架构: **{0}**" -f $os.OSArchitecture)
Add-Content $outputFile ("- 序列号: **{0}**" -f $os.SerialNumber)
Add-Content $outputFile ("- 安装日期: **{0}**" -f ($os.InstallDate).ToLocalTime())
Add-Content $outputFile ("- 最后启动时间: **{0}**" -f ($os.LastBootUpTime).ToLocalTime())
Add-Content $outputFile ("- 用户数: **{0}**" -f $os.NumberOfUsers)

# ===============================
# 0.1 硬件信息
# ===============================
Add-Content $outputFile "`n## 🛠️ 硬件信息"

$cpu = Get-CimInstance Win32_Processor
$ram = Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum
$gpu = Get-CimInstance Win32_VideoController
$disk = Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3"

Add-Content $outputFile ("- 处理器: **{0}** ({1} 核 {2} 线程)" -f $cpu.Name, $cpu.NumberOfCores, $cpu.NumberOfLogicalProcessors)
Add-Content $outputFile ("- 内存: **{0:N2} GB**" -f ($ram.Sum / 1GB))
foreach ($d in $disk) {
    Add-Content $outputFile ("- 磁盘: **{0}** 总大小 {1:N2} GB,剩余 {2:N2} GB" -f $d.DeviceID, ($d.Size/1GB), ($d.FreeSpace/1GB))
}
foreach ($g in $gpu) {
    Add-Content $outputFile ("- 显卡: **{0}** - 显存 {1:N2} GB" -f $g.Name, ($g.AdapterRAM/1GB))
}

# ===============================
# 0.2 已安装补丁
# ===============================
Add-Content $outputFile "`n## 🔒 已安装补丁 (Windows Update)"

$updates = Get-HotFix | Sort-Object InstalledOn -Descending
foreach ($u in $updates) {
    Add-Content $outputFile ("- **{0}** - 描述: {1} - 安装时间: {2}" -f $u.HotFixID, $u.Description, $u.InstalledOn)
}

# ===============================
# 1. 已安装软件列表
# ===============================
Add-Content $outputFile "`n## 📦 已安装软件列表"

$installedApps = Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* ,
                                  HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* ,
                                  HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |
    Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
    Where-Object { $_.DisplayName } |
    Sort-Object DisplayName

foreach ($app in $installedApps) {
    $line = "- **$($app.DisplayName)**"
    if ($app.DisplayVersion) { $line += " - 版本: $($app.DisplayVersion)" }
    if ($app.Publisher) { $line += " - 发布者: $($app.Publisher)" }
    if ($app.InstallDate) { $line += " - 安装日期: $($app.InstallDate)" }
    Add-Content $outputFile $line
}

# ===============================
# 2. C 盘各目录占用情况
# ===============================
Add-Content $outputFile "`n## 💾 C盘各目录占用情况"

$folders = Get-ChildItem "C:\" -Directory -Force
foreach ($folder in $folders) {
    try {
        $size = (Get-ChildItem $folder.FullName -Recurse -ErrorAction SilentlyContinue |
                 Measure-Object -Property Length -Sum).Sum
        $sizeGB = "{0:N2}" -f ($size / 1GB)
        Add-Content $outputFile ("- **{0}**: {1} GB" -f $folder.FullName, $sizeGB)
    } catch {
        Add-Content $outputFile ("- **{0}**: 无法访问" -f $folder.FullName)
    }
}

# ===============================
# 3. 启动项目
# ===============================
Add-Content $outputFile "`n## 🚀 启动项目"

$startupItems = Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location, User
foreach ($item in $startupItems) {
    Add-Content $outputFile ("- **{0}** - 路径: `{1}` - 用户: {2}" -f $item.Name, $item.Command, $item.User)
}

# ===============================
# 4. 服务项目
# ===============================
Add-Content $outputFile "`n## ⚙️ 服务项目"

$services = Get-Service | Sort-Object DisplayName
foreach ($svc in $services) {
    Add-Content $outputFile ("- **{0}** - 状态: {1} - 类型: {2}" -f $svc.DisplayName, $svc.Status, $svc.ServiceType)
}

# ===============================
# 5. 进程列表
# ===============================
Add-Content $outputFile "`n## 🖥️ 进程列表"

$processes = Get-Process | Sort-Object ProcessName
foreach ($p in $processes) {
    $cpu = if ($p.CPU) { "{0:N2}" -f $p.CPU } else { "N/A" }
    $mem = "{0:N2}" -f ($p.WorkingSet64 / 1MB)
    Add-Content $outputFile ("- **{0}** (PID: {1}) - CPU: {2} - 内存: {3} MB" -f $p.ProcessName, $p.Id, $cpu, $mem)
}

# ===============================
# 结束
# ===============================
Add-Content $outputFile "`n---"
Add-Content $outputFile "`n报告生成完成 ✅"

Write-Host "报告已保存到 $outputFile"

或者

# 以管理员身份运行此脚本
# 获取当前日期时间用于文件名
$date = Get-Date -Format "yyyyMMdd_HHmmss"
$outputFile = "C:\SystemReport_$date.md"

# 生成报告标题
"# Windows 系统信息报告" | Out-File -FilePath $outputFile
"**生成时间:** $(Get-Date -Format 'yyyy年MM月dd日 HH:mm:ss')" | Out-File -FilePath $outputFile -Append
"" | Out-File -FilePath $outputFile -Append

# 1. 获取系统信息
function Get-SystemInfo {
    Write-Host "正在获取系统信息..."
    "## 系统信息" | Out-File -FilePath $outputFile -Append
    "| 属性 | 值 |" | Out-File -FilePath $outputFile -Append
    "|------|-----|" | Out-File -FilePath $outputFile -Append
    
    $os = Get-CimInstance -ClassName Win32_OperatingSystem
    $computer = Get-CimInstance -ClassName Win32_ComputerSystem
    
    "| 操作系统 | $($os.Caption) ($($os.OSArchitecture)) |" | Out-File -FilePath $outputFile -Append
    "| 版本 | $($os.Version) |" | Out-File -FilePath $outputFile -Append
    "| 构建版本 | $($os.BuildNumber) |" | Out-File -FilePath $outputFile -Append
    "| 安装日期 | $($os.InstallDate.ToString('yyyy-MM-dd')) |" | Out-File -FilePath $outputFile -Append
    "| 最后启动时间 | $($os.LastBootUpTime.ToString('yyyy-MM-dd HH:mm:ss')) |" | Out-File -FilePath $outputFile -Append
    "| 系统制造商 | $($computer.Manufacturer) |" | Out-File -FilePath $outputFile -Append
    "| 系统型号 | $($computer.Model) |" | Out-File -FilePath $outputFile -Append
    "| 系统类型 | $($computer.SystemType) |" | Out-File -FilePath $outputFile -Append
    "| 用户名 | $($os.RegisteredUser) |" | Out-File -FilePath $outputFile -Append
    "| 组织 | $($os.Organization) |" | Out-File -FilePath $outputFile -Append
    "" | Out-File -FilePath $outputFile -Append
}

# 2. 获取硬件信息
function Get-HardwareInfo {
    Write-Host "正在获取硬件信息..."
    "## 硬件信息" | Out-File -FilePath $outputFile -Append
    
    # CPU信息
    $cpu = Get-CimInstance -ClassName Win32_Processor
    "### CPU信息" | Out-File -FilePath $outputFile -Append
    "| 属性 | 值 |" | Out-File -FilePath $outputFile -Append
    "|------|-----|" | Out-File -FilePath $outputFile -Append
    "| 处理器 | $($cpu.Name) |" | Out-File -FilePath $outputFile -Append
    "| 架构 | $($cpu.Architecture) |" | Out-File -FilePath $outputFile -Append
    "| 核心数 | $($cpu.NumberOfCores) |" | Out-File -FilePath $outputFile -Append
    "| 逻辑处理器 | $($cpu.NumberOfLogicalProcessors) |" | Out-File -FilePath $outputFile -Append
    "| 最大时钟速度 | $($cpu.MaxClockSpeed) MHz |" | Out-File -FilePath $outputFile -Append
    "" | Out-File -FilePath $outputFile -Append
    
    # 内存信息
    $memory = Get-CimInstance -ClassName Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum
    $totalMemoryGB = [math]::Round($memory.Sum / 1GB, 2)
    "### 内存信息" | Out-File -FilePath $outputFile -Append
    "| 属性 | 值 |" | Out-File -FilePath $outputFile -Append
    "|------|-----|" | Out-File -FilePath $outputFile -Append
    "| 总内存 | $totalMemoryGB GB |" | Out-File -FilePath $outputFile -Append
    "| 内存条数 | $($memory.Count) |" | Out-File -FilePath $outputFile -Append
    
    $memorySlots = Get-CimInstance -ClassName Win32_PhysicalMemory
    $i = 1
    foreach ($slot in $memorySlots) {
        $sizeGB = [math]::Round($slot.Capacity / 1GB, 2)
        "| 内存条 $i | $sizeGB GB, $($slot.Speed) MHz, $($slot.Manufacturer) |" | Out-File -FilePath $outputFile -Append
        $i++
    }
    "" | Out-File -FilePath $outputFile -Append
    
    # 磁盘信息
    $disks = Get-CimInstance -ClassName Win32_DiskDrive
    "### 磁盘信息" | Out-File -FilePath $outputFile -Append
    "| 属性 | 值 |" | Out-File -FilePath $outputFile -Append
    "|------|-----|" | Out-File -FilePath $outputFile -Append
    
    foreach ($disk in $disks) {
        $sizeGB = [math]::Round($disk.Size / 1GB, 2)
        "| $($disk.Model) | $sizeGB GB |" | Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
    
    # 分区信息
    $partitions = Get-CimInstance -ClassName Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3}
    "### 分区信息" | Out-File -FilePath $outputFile -Append
    "| 驱动器 | 总大小 | 可用空间 | 使用率 |" | Out-File -FilePath $outputFile -Append
    "|--------|--------|----------|--------|" | Out-File -FilePath $outputFile -Append
    
    foreach ($partition in $partitions) {
        $totalGB = [math]::Round($partition.Size / 1GB, 2)
        $freeGB = [math]::Round($partition.FreeSpace / 1GB, 2)
        $usedGB = $totalGB - $freeGB
        $usagePercent = [math]::Round(($usedGB / $totalGB) * 100, 2)
        "| $($partition.DeviceID) | ${totalGB}GB | ${freeGB}GB | ${usagePercent}% |" | Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
    
    # 显卡信息
    $gpus = Get-CimInstance -ClassName Win32_VideoController | Where-Object {$_.Name -notlike "*Remote*"}
    "### 显卡信息" | Out-File -FilePath $outputFile -Append
    "| 属性 | 值 |" | Out-File -FilePath $outputFile -Append
    "|------|-----|" | Out-File -FilePath $outputFile -Append
    
    foreach ($gpu in $gpus) {
        if ($gpu.AdapterRAM) {
            $vramGB = [math]::Round($gpu.AdapterRAM / 1GB, 2)
            "| $($gpu.Name) | ${vramGB}GB |" | Out-File -FilePath $outputFile -Append
        } else {
            "| $($gpu.Name) | 信息不可用 |" | Out-File -FilePath $outputFile -Append
        }
    }
    "" | Out-File -FilePath $outputFile -Append
    
    # 网络适配器信息
    $adapters = Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration | Where-Object {$_.IPEnabled -eq $true}
    "### 网络适配器信息" | Out-File -FilePath $outputFile -Append
    "| 适配器名称 | IP地址 | MAC地址 |" | Out-File -FilePath $outputFile -Append
    "|------------|--------|---------|" | Out-File -FilePath $outputFile -Append
    
    foreach ($adapter in $adapters) {
        $adapterName = (Get-CimInstance -ClassName Win32_NetworkAdapter | Where-Object {$_.Index -eq $adapter.Index}).Name
        "| $adapterName | $($adapter.IPAddress -join ', ') | $($adapter.MACAddress) |" | Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
}

# 3. 获取系统更新补丁列表
function Get-WindowsUpdates {
    Write-Host "正在获取系统更新补丁列表..."
    "## Windows 更新补丁列表" | Out-File -FilePath $outputFile -Append
    "| 补丁ID | 描述 | 安装日期 |" | Out-File -FilePath $outputFile -Append
    "|--------|------|----------|" | Out-File -FilePath $outputFile -Append
    
    $updates = Get-HotFix | Sort-Object InstalledOn -Descending
    
    foreach ($update in $updates) {
        $installDate = if ($update.InstalledOn) { $update.InstalledOn.ToString('yyyy-MM-dd') } else { "未知" }
        "| $($update.HotFixID) | $($update.Description) | $installDate |" | Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
}

# 4. 获取所有已安装的软件列表
function Get-SoftwareList {
    Write-Host "正在获取已安装软件列表..."
    "## 已安装软件列表" | Out-File -FilePath $outputFile -Append
    "| 软件名称 | 版本 | 发布者 | 安装日期 |" | Out-File -FilePath $outputFile -Append
    "|----------|------|--------|----------|" | Out-File -FilePath $outputFile -Append
    
    $softwareList = Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*", 
        "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" |
        Where-Object { $_.DisplayName -ne $null } |
        Select-Object DisplayName, DisplayVersion, Publisher, InstallDate |
        Sort-Object DisplayName
    
    foreach ($software in $softwareList) {
        "| $($software.DisplayName) | $($software.DisplayVersion) | $($software.Publisher) | $($software.InstallDate) |" | 
            Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
}

# 5. 获取C盘各目录占用情况
function Get-DiskUsage {
    Write-Host "正在分析C盘目录占用情况..."
    "## C盘目录占用情况" | Out-File -FilePath $outputFile -Append
    "| 目录 | 大小(MB) |" | Out-File -FilePath $outputFile -Append
    "|------|----------|" | Out-File -FilePath $outputFile -Append
    
    $topDirectories = Get-ChildItem -Path "C:\" -Directory | ForEach-Object {
        $dir = $_.FullName
        $size = (Get-ChildItem -Path $dir -Recurse -File -ErrorAction SilentlyContinue | 
            Measure-Object -Property Length -Sum).Sum
        [PSCustomObject]@{
            Directory = $dir
            Size_MB   = [math]::Round(($size / 1MB), 2)
        }
    } | Sort-Object Size_MB -Descending | Select-Object -First 20
    
    foreach ($dir in $topDirectories) {
        "| $($dir.Directory) | $($dir.Size_MB) |" | Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
}

# 6. 获取所有启动项目
function Get-StartupItems {
    Write-Host "正在获取启动项目..."
    "## 启动项目" | Out-File -FilePath $outputFile -Append
    "| 名称 | 命令 | 位置 |" | Out-File -FilePath $outputFile -Append
    "|------|------|------|" | Out-File -FilePath $outputFile -Append
    
    # 获取当前用户启动项
    $userStartup = Get-CimInstance -ClassName Win32_StartupCommand | 
        Select-Object Name, Command, Location
    
    foreach ($item in $userStartup) {
        "| $($item.Name) | $($item.Command) | $($item.Location) |" | Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
}

# 7. 获取所有服务项目
function Get-Services {
    Write-Host "正在获取服务列表..."
    "## 系统服务" | Out-File -FilePath $outputFile -Append
    "| 服务名称 | 显示名称 | 状态 | 启动类型 |" | Out-File -FilePath $outputFile -Append
    "|----------|----------|------|----------|" | Out-File -FilePath $outputFile -Append
    
    $services = Get-Service | Select-Object Name, DisplayName, Status, @{
        Name="StartType"; 
        Expression={(Get-CimInstance -ClassName Win32_Service -Filter "Name='$($_.Name)'").StartType}
    } | Sort-Object DisplayName
    
    foreach ($service in $services) {
        "| $($service.Name) | $($service.DisplayName) | $($service.Status) | $($service.StartType) |" | 
            Out-File -FilePath $outputFile -Append
    }
    "" | Out-File -FilePath $outputFile -Append
}

# 8. 获取所有进程列表
function Get-Processes {
    Write-Host "正在获取进程列表..."
    "## 运行进程" | Out-File -FilePath $outputFile -Append
    "| 进程名 | ID | 内存(MB) | 路径 |" | Out-File -FilePath $outputFile -Append
    "|--------|----|----------|------|" | Out-File -FilePath $outputFile -Append
    
    $processes = Get-Process | Select-Object ProcessName, Id, @{
        Name="WorkingSet(MB)"; 
        Expression={[math]::Round($_.WorkingSet / 1MB, 2)}
    }, Path | Sort-Object "WorkingSet(MB)" -Descending | Select-Object -First 30
    
    foreach ($process in $processes) {
        "| $($process.ProcessName) | $($process.Id) | $($process.'WorkingSet(MB)') | $($process.Path) |" | 
            Out-File -FilePath $outputFile -Append
    }
}

# 执行所有信息收集函数
Get-SystemInfo
Get-HardwareInfo
Get-WindowsUpdates
Get-SoftwareList
Get-DiskUsage
Get-StartupItems
Get-Services
Get-Processes

Write-Host "Markdown格式的报告已保存到: $outputFile"
Write-Host "您可以使用Markdown查看器查看此文件,或将其转换为HTML/PDF格式"
  1. 选择上述任何一个脚本保存为 .ps1 文件(例如 SystemReport.ps1

  2. 以管理员身份运行PowerShell

  3. 执行脚本:.\SystemReport.ps1

脚本会生成md文件,这是Markdown编辑器的列表文件,可以将报告上复制粘贴到兼容Markdown编辑代码的平台进行发布,用浏览器就可以打开md文件

 

 


sicnature ---------------------------------------------------------------------
I P 地 址: 216.73.216.147
区 域 位 置: 美国加利福尼亚洛杉矶
系 统 信 息: 美国
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source https://www.myzhenai.com/post/4775.html

没有评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注