|
|
发表于 2026-5-5 15:33:19
|
显示全部楼层
本帖最后由 yakeyun 于 2026-5-5 15:34 编辑
- # 设置错误处理
- $ErrorActionPreference = "Stop"
- try {
- # 一次性获取所有磁盘信息,减少重复查询
- $disks = Get-WmiObject Win32_DiskDrive | Select-Object Model, InterfaceType, Size, MediaType, SerialNumber
- $physicalDisks = Get-PhysicalDisk | Select-Object FriendlyName, MediaType, Size, HealthStatus, OperationalStatus
- # 创建结果数组
- $results = @()
- # 遍历每个磁盘
- foreach ($disk in $disks) {
- $model = $disk.Model.Trim()
- $sizeGB = if ($disk.Size) { [math]::Round($disk.Size / 1GB, 2) } else { 0 }
- # 查找匹配的物理磁盘信息
- $mediaMatch = $physicalDisks | Where-Object { $_.FriendlyName.Trim() -eq $model }
-
- $mediaType = if ($mediaMatch) {
- switch ($mediaMatch.MediaType) {
- 3 { "HDD" }
- 4 { "SSD" }
- 5 { "SCM" } # Storage Class Memory
- default { $mediaMatch.MediaType.ToString() }
- }
- } else { "Unknown" }
- $healthStatus = if ($mediaMatch) { $mediaMatch.HealthStatus } else { "Unknown" }
- $operationalStatus = if ($mediaMatch) { $mediaMatch.OperationalStatus } else { "Unknown" }
- # 根据接口和媒体类型确定磁盘类型
- $diskType = switch ($disk.InterfaceType) {
- "SCSI" {
- switch ($mediaType) {
- "SSD" { "M.2固态硬盘" }
- "HDD" { "SAS机械硬盘" }
- "SCM" { "存储级内存" }
- default { "SCSI设备" }
- }
- }
- "USB" {
- switch ($mediaType) {
- "SSD" { "USB固态硬盘" }
- "HDD" { "USB机械硬盘" }
- default { "USB存储设备" }
- }
- }
- "IDE" {
- switch ($mediaType) {
- "SSD" { "SATA固态硬盘" }
- "HDD" { "SATA机械硬盘" }
- default { "IDE设备" }
- }
- }
- "NVMe" { "NVMe固态硬盘" }
- "SATA" {
- switch ($mediaType) {
- "SSD" { "SATA固态硬盘" }
- "HDD" { "SATA机械硬盘" }
- default { "SATA设备" }
- }
- }
- default { "未知设备" }
- }
- # 添加到结果数组
- $results += [PSCustomObject]@{
- "磁盘型号" = $model
- "接口类型" = $disk.InterfaceType
- "媒体类型" = $mediaType
- "磁盘类型" = $diskType
- "容量(GB)" = $sizeGB
- "健康状态" = $healthStatus
- "运行状态" = $operationalStatus
- "序列号" = $disk.SerialNumber
- }
- }
- # 输出详细磁盘信息
- Write-Host "`n磁盘详细信息:" -ForegroundColor Green
- $results | Sort-Object "磁盘类型" | Format-Table -AutoSize -Property "磁盘型号", "磁盘类型", "容量(GB)", "接口类型", "媒体类型", "健康状态", "运行状态"
- # 统计汇总
- $summary = $results | Group-Object "磁盘类型" | ForEach-Object {
- $totalSizeGB = ($_.Group | Measure-Object -Property "容量(GB)" -Sum).Sum
- [PSCustomObject]@{
- "磁盘类型" = $_.Name
- "数量" = $_.Count
- "总容量(GB)" = [math]::Round($totalSizeGB, 2)
- }
- }
- # 输出汇总信息
- Write-Host "`n磁盘类型统计汇总:" -ForegroundColor Cyan
- $summary | Sort-Object "数量" -Descending | Format-Table -AutoSize
- # 导出结果到CSV文件
- $csvPath = Join-Path -Path $env:USERPROFILE -ChildPath "Desktop\DiskInfo_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
- $results | Export-Csv -Path $csvPath -NoTypeInformation -Encoding UTF8
- Write-Host "`n结果已导出到: $csvPath" -ForegroundColor Yellow
- } catch {
- Write-Host "`n发生错误: $_" -ForegroundColor Red
- Write-Host "错误详情: $($_.ScriptStackTrace)" -ForegroundColor DarkYellow
- }
复制代码
输出信息如下,可以根据工作环境修改具体代码执行需求:
PS C:\Users\Administrator\Desktop> C:\Users\Administrator\Desktop\disks.ps1
磁盘详细信息:
磁盘型号 磁盘类型 容量(GB) 接口类型 媒体类型 健康状态 运行状态
---- ---- ------ ---- ---- ---- ----
Samsung SSD 860 EVO 250GB SATA固态硬盘 232.88 IDE SSD Healthy OK
Innostor Secured Drive USB Device USB存储设备 0 USB Unknown Unknown Unknown
Innostor 903 USB Device USB存储设备 110.06 USB Unknown Unknown Unknown
磁盘类型统计汇总:
磁盘类型 数量 总容量(GB)
---- -- -------
USB存储设备 2 110.06
SATA固态硬盘 1 232.88
结果已导出到: C:\Users\Administrator\Desktop\DiskInfo_20260505_153035.csv
PS C:\Users\Administrator\Desktop> |
|