WMIC 批处理文件循环遍历 CSV 并获取驱动器状态

WMIC 批处理文件循环遍历 CSV 并获取驱动器状态

我正在使用此代码检查我公司远程电脑的驱动器健康状态

for /f "tokens=1 delims= " %%a in (C:\temp\HOSTNAMES.csv) do (
    WMIC /Node:%%a  DiskDrive GET Caption, Status
)

这很有效,但我需要捕获网络上每台 PC HOSTNAME 的状态,即(OK)或(Pred Fail),并构建一个简单的 .CSV 报告,因为有超过 2000 台 PC 需要检查

所以报告看起来是这样的

PC HOSTNAME  - STATUS
HOSTNAME01A  - OK
HOSTNAME02B  - Pred Fail
HOSTNAME03C   - Pred Fail
HOSTNAME04D   - OK

我真的很努力地将驱动器状态分配给变量,以便我可以构建报告。

答案1

  • "tokens=1 delims= "是默认的,不需要表达。
  • 当使用 wmic 时,/Format:csv该节点将成为输出的一部分

:: Q:\Test\2018\10\30\SU_1371253.cmd
@Echo off
SetLocal EnableExtensions EnableDelayedExpansion

( for /f %%H in (HOSTNAMES.csv) do (
      Echo:Processing %%H>CON:
      for /f "delims=" %%A in ('
          WMIC /node:%%H DiskDrive GET Caption^,Status /Format:csv ^|findstr /i "%%H"
      ') do @Echo %%A
  )
) > "%~dpn0.Log"

答案2

根据 LotPings 的指示,输出格式包括节点名称。如果我们将其与从文件读取主机列表的csv能力结合起来,我们可以使用wmic

wmic /node:@"c:\temp\hostnames.csv" DiskDrive get Caption,Status /format:csv > report.csv

或者

wmic /node:@"c:\temp\hostnames.csv" /output:"report.csv" DiskDrive get Caption,Status /format:csv 

通过这种方式,我们只启动一个wmic进程,而不是每个节点启动一个进程。

相关内容