在多台计算机上运行进程的VBscript检查
下面是我一直在尝试编写的脚本,用于检查进程是否在远程计算机列表上运行。它是有效的,因为它报告进程正在远程机器上运行,但是如果它没有运行,我没有得到任何指示,它只是跳过该机器。如果进程未运行,我所有显示备用消息的尝试都失败。是否有办法说明如果找不到PROCESS.exe,请显示: “进程未在上运行”&计算机名 然后继续在所有的机器上循环? 谢谢你的帮助在多台计算机上运行进程的VBscript检查,vbscript,Vbscript,下面是我一直在尝试编写的脚本,用于检查进程是否在远程计算机列表上运行。它是有效的,因为它报告进程正在远程机器上运行,但是如果它没有运行,我没有得到任何指示,它只是跳过该机器。如果进程未运行,我所有显示备用消息的尝试都失败。是否有办法说明如果找不到PROCESS.exe,请显示: “进程未在上运行”&计算机名 然后继续在所有的机器上循环? 谢谢你的帮助 Set fso = CreateObject("Scripting.FileSystemObject") Set listFile = fso.O
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
谢谢你。这真的帮助我明白了我当初应该去做什么。唯一的问题是我必须翻转两个“找到的”结果文本,因为它们似乎是颠倒的,但经过一点调整后,它正是我想要的。再次感谢,谢谢你。这真的帮助我明白了我当初应该去做什么。唯一的问题是我必须翻转两个“找到的”结果文本,因为它们似乎是颠倒的,但经过一点调整后,它正是我想要的。再次感谢。