Я использую этот код для проверки состояния диска удаленного ПК в моей компании

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

это работает хорошо, но мне нужно захватить статус т.е.OK) или (Pred Fail) для каждого ПК HOSTNAME в нашей сети и просто построить.Отчет CSV, так как есть более 2000 компьютеров для проверки

так что отчет будет выглядеть так

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

Я действительно изо всех сил пытаюсь присвоить статус диска переменной, чтобы я мог затем построить отчет.

2 ответа2

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"
0

Как указано в 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 процесс вместо одного для каждого узла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .