在多台计算机上运行进程的VBscript检查

在多台计算机上运行进程的VBscript检查,vbscript,Vbscript,下面是我一直在尝试编写的脚本,用于检查进程是否在远程计算机列表上运行。它是有效的,因为它报告进程正在远程机器上运行,但是如果它没有运行,我没有得到任何指示,它只是跳过该机器。如果进程未运行,我所有显示备用消息的尝试都失败。是否有办法说明如果找不到PROCESS.exe,请显示: “进程未在上运行”&计算机名 然后继续在所有的机器上循环? 谢谢你的帮助 Set fso = CreateObject("Scripting.FileSystemObject") Set listFile = fso.O

下面是我一直在尝试编写的脚本,用于检查进程是否在远程计算机列表上运行。它是有效的,因为它报告进程正在远程机器上运行,但是如果它没有运行,我没有得到任何指示,它只是跳过该机器。如果进程未运行,我所有显示备用消息的尝试都失败。是否有办法说明如果找不到PROCESS.exe,请显示:

“进程未在上运行”&计算机名

然后继续在所有的机器上循环? 谢谢你的帮助

Set fso = CreateObject("Scripting.FileSystemObject")
Set listFile = fso.OpenTextFile("C:\list.txt")

Do While Not listFile.AtEndOfStream
ComputerName =  listFile.ReadLine()
Set Service = GetObject("winmgmts:\\" & ComputerName &"")
    for each Process in Service.InstancesOf ("Win32_Process")
        If Process.Name = "PROCESS.exe" then
            wscript.echo "PROCESS running on " & ComputerName
        End If
    Next
Loop

你不能简单地使用开关吗

   foundIt = false
   for each Process in Service.InstancesOf ("Win32_Process")
        If Process.Name = "PROCESS.exe" then
            foundIt = true
            exit for
        End If
    Next

    if (foundIt) then
       wscript.echo "PROCESS running on " & ComputerName
    else
       wscript.echo "PROCESS NOT running on " & ComputerName
    end if

你不能简单地使用开关吗

   foundIt = false
   for each Process in Service.InstancesOf ("Win32_Process")
        If Process.Name = "PROCESS.exe" then
            foundIt = true
            exit for
        End If
    Next

    if (foundIt) then
       wscript.echo "PROCESS running on " & ComputerName
    else
       wscript.echo "PROCESS NOT running on " & ComputerName
    end if

找到匹配进程时,只需在内部循环中设置一个标志。这样,无论循环完成后是否找到进程,都可以打印消息。此外,您还应该添加一些错误处理(以防无法连接到服务器),并可能使用
ExecQuery
和一个过滤器来筛选您正在查找的进程名称,这样您就不必从所有服务器检索所有进程名称

processname = "PROCESS.EXE"
query = "SELECT * FROM Win32_Process WHERE Name='" & processname & "'"

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\list.txt")

Do Until f.AtEndOfStream
  skipServer = False
  server = f.ReadLine

  On Error Resume Next
  Set wmi = GetObject("winmgmts://" & server &"/root/cimv2")
  If Err Then
    WScript.Echo "Error " & Err.Number & " connecting to " & server ": " _
      & Err.Description
    On Error Goto 0
    skipServer = True
  End If
  On Error Goto 0

  If Not skipServer Then
    found = "not "
    For Each process in wmi.ExecQuery(query)
      found = ""
      Exit For
    Next

    WScript.Echo "PROCESS.EXE " & found & "running on " & server & "."
  End If
Loop

f.Close

找到匹配进程时,只需在内部循环中设置一个标志。这样,无论循环完成后是否找到进程,都可以打印消息。此外,您还应该添加一些错误处理(以防无法连接到服务器),并可能使用
ExecQuery
和一个过滤器来筛选您正在查找的进程名称,这样您就不必从所有服务器检索所有进程名称

processname = "PROCESS.EXE"
query = "SELECT * FROM Win32_Process WHERE Name='" & processname & "'"

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\list.txt")

Do Until f.AtEndOfStream
  skipServer = False
  server = f.ReadLine

  On Error Resume Next
  Set wmi = GetObject("winmgmts://" & server &"/root/cimv2")
  If Err Then
    WScript.Echo "Error " & Err.Number & " connecting to " & server ": " _
      & Err.Description
    On Error Goto 0
    skipServer = True
  End If
  On Error Goto 0

  If Not skipServer Then
    found = "not "
    For Each process in wmi.ExecQuery(query)
      found = ""
      Exit For
    Next

    WScript.Echo "PROCESS.EXE " & found & "running on " & server & "."
  End If
Loop

f.Close

谢谢你。这真的帮助我明白了我当初应该去做什么。唯一的问题是我必须翻转两个“找到的”结果文本,因为它们似乎是颠倒的,但经过一点调整后,它正是我想要的。再次感谢,谢谢你。这真的帮助我明白了我当初应该去做什么。唯一的问题是我必须翻转两个“找到的”结果文本,因为它们似乎是颠倒的,但经过一点调整后,它正是我想要的。再次感谢。