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

Powershell查询计算机硬盘介质类型导出CSV文件异常问题求助

问题描述

需要统计各台计算机配备的是HDD还是SSD,现有存储了计算机列表的csv文件,导入列表执行脚本后,导出的csv文件要么不存在要么数据不完整,需要指出脚本错误部分。

初始错误脚本

$computers = Import-csv -path "C:\Temp\MediaType\Computers.csv" 
foreach ($computer in $computers) { 
    Write-Host "`nPulling Physical Drive(s) for $computer"
    if((Test-Connection -BufferSize 32 -Count 1 -ComputerName $computer -Quiet)){ 
        Invoke-Command -ComputerName $computer -ScriptBlock { 
            Get-WmiObject -Class MSFT_PhysicalDisk -Namespace root\Microsoft\Windows\Storage | Select-Object sort -Property PSComputerName, Model, SerialNumber, MediaType
            Export-Csv C:\Temp\devices.csv
        }
    }
}

原脚本错误点汇总

  • Export-Csv写在Invoke-Command的脚本块内部,会在远程被控计算机上执行导出操作,文件会生成在远程机器的C:\Temp路径下,而非你当前操作的本地机器,所以本地找不到导出文件
  • 语法错误:Select-Object sort -Property写法错误,排序操作需要单独调用Sort-Object命令,不能直接将sort作为参数传给Select-Object,会导致查询结果输出异常
  • 导出时没有加-Append参数,每次执行Export-Csv都会直接覆盖原有文件,最终只会保留最后一台成功查询的设备数据,导致结果不完整
  • Test-Connection的-ComputerName参数直接传入$computer对象,没有指定CSV中存储设备名的对应字段(比如你最终脚本用到的$computer.computer),会导致网络连通性检测失败,大量在线设备被误判为离线
  • 使用已经过时的Get-WmiObject接口,在新的Windows系统上兼容性较差,容易出现查询失败的问题,官方已经推荐替换为Get-CimInstance接口

修正后可用脚本

$ExportTo = "C:\Temp\devices.csv"
$computers = Import-csv -path "C:\Temp\Computers.csv"
{} | Select "ComputerName", "Status", "Model", "SerialNumber", "MediaType" | Export-Csv $ExportTo
$data = Import-csv -path $ExportTo 
foreach ($computer in $computers) {
$Online = Test-Connection -BufferSize 32 -Count 1 -ComputerName $computer.computer -Quiet
if ($Online) {
Write-Host $computer.computer " is Online"
$OutputMessage = Get-CimInstance -ClassName MSFT_PhysicalDisk -Namespace root\Microsoft\Windows\Storage -ComputerName $computer.computer | Select-Object -Property PSComputerName,@{N='Status';E={'Online'}}, Model, SerialNumber, MediaType
$data.ComputerName = $computer.computer
$data.Status = $OutputMessage.Status
$data.Model = $OutputMessage.Model
$data.SerialNumber = $OutputMessage.SerialNumber
$data.MediaType = $OutputMessage.MediaType
$data | Export-Csv -Path $ExportTo -Append -NoTypeInformation
} else {
Write-Host $computer.computer " is Offline"
$data.ComputerName = $computer.computer
$data.Status = "Offline"
$data.Model = ""
$data.SerialNumber = ""
$data.MediaType = ""
$data | Export-Csv -Path $ExportTo -Append -NoTypeInformation
}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:07