0

以下は、プロセスがリモートコンピューターのリストで実行されているかどうかを確認するためにまとめようとしているスクリプトです。プロセスがリモートマシンで実行されていることを報告するという点で機能しますが、実行されていない場合は何も表示されず、そのマシンをスキップするだけです。プロセスが実行されていない場合に別のメッセージを表示する試みはすべて失敗しました。PROCESS.exe が見つからない場合、次のように表示する方法はありますか?

"PROCESS NOT running on " & ComputerName

その後、すべてのマシンをループし続けますか? 助けてくれてありがとう。

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
4

2 に答える 2

2

一致するプロセスが見つかったら、内側のループにフラグを設定するだけです。そうすれば、ループの終了後にプロセスが見つかったかどうかに関係なく、メッセージを出力できます。また、(サーバーに接続できない場合に備えて) エラー処理を追加し、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
于 2013-07-01T15:49:46.033 に答える
1

単にトグルを使用することはできませんか?

   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
于 2013-07-01T15:34:46.200 に答える