Проверьте, запущен ли процесс на нескольких машинах - PullRequest
0 голосов
/ 13 февраля 2019

Я новичок в VBS, но смог создать простой сценарий, чтобы определить, работает ли PowerPoint на моем локальном компьютере.Однако моей конечной целью является проверка нескольких удаленных компьютеров и отображение таких результатов, как: Machine1: не работает Machine2: работает Machine3: не работает и т. Д.

И вот тут я застрял.

Dim i
Dim strComputer
Dim FindProc

strComputer = "."

FindProc = "powerpnt"

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select Name from Win32_Process WHERE Name LIKE '" & FindProc & "%'")

If colProcessList.count>0 then
wscript.echo "Powerpoint is running"
else
wscript.echo "Powerpoint is not running"
End if

Set objWMIService = Nothing
Set colProcessList = Nothing

1 Ответ

0 голосов
/ 14 февраля 2019

Редактировать:

Что касается выходных данных, вы всегда можете записать его в файл в соответствии с вашими потребностями или создать строку нужного формата, объединяя каждый статус компьютера во время каждой итерации и Wscript.Echoэто потом.Возможно, не удастся найти процесс по ряду причин (например, строка, которую вы используете для ссылки на целевой компьютер, неправильно отформатирована), я действительно не могу сказать наверняка без дополнительного контекста.Я переписал решение, стараясь сделать его максимально понятным и похожим на ваш собственный код.

Dim FSObject, MachineListObject, outFileObject
Dim processName, objWMIService, coolProcesses, strComputer

Set FSObject = CreateObject("Scripting.FileSystemObject")
Set MachineListObject = FSObject.OpenTextFile("C:\test\remote_hosts.txt") 
Set outFileObject = FSObject.CreateTextFile("C:\test\out.txt", True)

processName = "notepad++.exe" 'Change this to your process of choice

Do While Not MachineListObject.AtEndOfStream

    strComputer =  MachineListObject.ReadLine()
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

    Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & processName & "'")

    If colProcesses.Count <> 0  then
        outFileObject.Write "Machine " & strComputer & ": Service is running" & vbCrLf
    Else
        outFileObject.Write "Machine " & strComputer & ": Service is not running" & vbCrLf  
    End If

Loop

outFileObject.Close

Это может помочь вам: Что такое "strComputer"? и Win32_Process (прокрутите вниз до раздела примеров, если вы хотите, чтобы он работал как можно скорее)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...