Извините за название, я изо всех сил пытался объяснить это в одной строке.

У меня есть простой скрипт, который получает статус удаленной системы, возвращает строку, которая содержит общий объем памяти, и выводит его в файл:

systeminfo /s:HOSTNAME | findstr /C:"Total Physical Memory" >> "D:\All PCs\RAM_LOG.txt"

У меня есть текстовый файл, в котором есть все имена хостов для каждого компьютера, который я хочу проверить. Как я могу выполнить эту же команду на каждом ПК в текстовом файле, не создавая пакетный файл, повторяющий эту же строку?

Также, если возможно, также включить имя хоста в журнал.

Спасибо

ОБНОВЛЕНИЕ: я придумал это, скоро опробую.

for /F "tokens=*" %%A in ("D:\All Pcs\pclist.txt") do (
    echo.   
    echo %%A >> "D:\All PCs\RAM_LOG.txt"
    systeminfo /s:%%A | findstr /C:"Total Physical Memory" >> "D:\All PCs\RAM_LOG.txt"
)

2 ответа2

1

Чтобы получить только общий объем памяти, используйте wmic query - это намного быстрее.
например:

...
wmic /NODE:"%%A" /APPEND:"D:\All PCs\RAM_LOG.txt" MEMPHYSICAL get name, TotalPhysicalMemory

Но вам не нужен командный файл, лучше использовать файл с именами хостов, разделенными запятой

wmic /NODE:@"D:\All Pcs\pclist.txt" /APPEND:"D:\All PCs\RAM_LOG.txt" computersystem get name, TotalPhysicalMemory

Вы также можете добавить глобальную опцию /FAILFAST (тайм-аут для подключения к удаленной машине)

WMIC /FAILFAST:1000 ...
1

Мне удалось сделать это с помощью следующего:

for /F "tokens=*" %%A in ("D:\All Pcs\pclist.txt") do (
    echo.   
    echo %%A >> "D:\All PCs\RAM_LOG.txt"
    systeminfo /s:%%A | findstr /C:"Total Physical Memory" >> "D:\All PCs\RAM_LOG.txt"
)

Где pclist.txt - это список всех имен хостов для сканирования.

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