Prozess auf remote-pc prüfen

  • hallöle mal wieder!

    möchte gerne prüfen ob auf einem bestimmten remote-pc ein prozess läauft oder nicht!

    das ganze aber ohne das auf dem pc ein client laufen muss...

    lg oli

  • Hallo.
    Über WMI Bekommst du rcht viele Processinformationen:

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    [/autoit] [autoit][/autoit] [autoit]

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "AddressWidth: " & $objItem.AddressWidth & @CRLF
    $Output = $Output & "Architecture: " & $objItem.Architecture & @CRLF
    $Output = $Output & "Availability: " & $objItem.Availability & @CRLF
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "ConfigManagerErrorCode: " & $objItem.ConfigManagerErrorCode & @CRLF
    $Output = $Output & "ConfigManagerUserConfig: " & $objItem.ConfigManagerUserConfig & @CRLF
    $Output = $Output & "CpuStatus: " & $objItem.CpuStatus & @CRLF
    $Output = $Output & "CreationClassName: " & $objItem.CreationClassName & @CRLF
    $Output = $Output & "CurrentClockSpeed: " & $objItem.CurrentClockSpeed & @CRLF
    $Output = $Output & "CurrentVoltage: " & $objItem.CurrentVoltage & @CRLF
    $Output = $Output & "DataWidth: " & $objItem.DataWidth & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "DeviceID: " & $objItem.DeviceID & @CRLF
    $Output = $Output & "ErrorCleared: " & $objItem.ErrorCleared & @CRLF
    $Output = $Output & "ErrorDescription: " & $objItem.ErrorDescription & @CRLF
    $Output = $Output & "ExtClock: " & $objItem.ExtClock & @CRLF
    $Output = $Output & "Family: " & $objItem.Family & @CRLF
    $Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output = $Output & "L2CacheSize: " & $objItem.L2CacheSize & @CRLF
    $Output = $Output & "L2CacheSpeed: " & $objItem.L2CacheSpeed & @CRLF
    $Output = $Output & "LastErrorCode: " & $objItem.LastErrorCode & @CRLF
    $Output = $Output & "Level: " & $objItem.Level & @CRLF
    $Output = $Output & "LoadPercentage: " & $objItem.LoadPercentage & @CRLF
    $Output = $Output & "Manufacturer: " & $objItem.Manufacturer & @CRLF
    $Output = $Output & "MaxClockSpeed: " & $objItem.MaxClockSpeed & @CRLF
    $Output = $Output & "Name: " & $objItem.Name & @CRLF
    $Output = $Output & "OtherFamilyDescription: " & $objItem.OtherFamilyDescription & @CRLF
    $Output = $Output & "PNPDeviceID: " & $objItem.PNPDeviceID & @CRLF
    $strPowerManagementCapabilities = $objItem.PowerManagementCapabilities(0)
    $Output = $Output & "PowerManagementCapabilities: " & $strPowerManagementCapabilities & @CRLF
    $Output = $Output & "PowerManagementSupported: " & $objItem.PowerManagementSupported & @CRLF
    $Output = $Output & "ProcessorId: " & $objItem.ProcessorId & @CRLF
    $Output = $Output & "ProcessorType: " & $objItem.ProcessorType & @CRLF
    $Output = $Output & "Revision: " & $objItem.Revision & @CRLF
    $Output = $Output & "Role: " & $objItem.Role & @CRLF
    $Output = $Output & "SocketDesignation: " & $objItem.SocketDesignation & @CRLF
    $Output = $Output & "Status: " & $objItem.Status & @CRLF
    $Output = $Output & "StatusInfo: " & $objItem.StatusInfo & @CRLF
    $Output = $Output & "Stepping: " & $objItem.Stepping & @CRLF
    $Output = $Output & "SystemCreationClassName: " & $objItem.SystemCreationClassName & @CRLF
    $Output = $Output & "SystemName: " & $objItem.SystemName & @CRLF
    $Output = $Output & "UniqueId: " & $objItem.UniqueId & @CRLF
    $Output = $Output & "UpgradeMethod: " & $objItem.UpgradeMethod & @CRLF
    $Output = $Output & "Version: " & $objItem.Version & @CRLF
    $Output = $Output & "VoltageCaps: " & $objItem.VoltageCaps & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Processor" )
    Endif

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func WMIDateStringToDate($dtmDate)

    [/autoit] [autoit][/autoit] [autoit]

    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]
  • ok das mit dem wmi hab ich jetzt hinbekommen... so ich hab nun folgendes problem:

    ich muss auf mehreren pcs (pcnamen: student1 - student10) den status eines prozesses (läuft / läuft nicht) anfragen, damit ich den status wegen mir mit einem bild auf meiner gui darstellen kann (ich will also überprüfen mit wem ich verbunden bin!) ... ein problem is jetzt nur wenn ich das in einer schleife mit den pcs mach dann kann ich nebenher auf meiner gui nix mehr machen! des is blöd!

    wie könnte ich das ganze noch realisieren:

    also testen welcher von 10 definierten pcs eine verbindung auf meinen vnc server hat (is für einen schulungsraum) und das auf meiner gui darstellen (bild/farbe/text - das is egal)

    hilfeeeeeeeeeee :D

    ich verzweifel noch an mir selbst

    lg oli

  • ok... und wie "sagt" mir das diese exe? n beispiel wär ned schlecht... :klatschen:

    lg oli :musik2:

  • bin jetzt mitlerweile davon abgekommen das ich keinen client will... sofern das nur was ganz kleines is!

    also kurz zum aufbau nachher:

    - hab en trainer-pc und 10 schulungs-pcs
    - auf dem trainer-pc will ich ne gui programmieren die mir alle schulungs-pcs anzeigt (das is kein problem is ja alles nur grafisches gedöööns)
    - unter jeden schulungs-pc auf der gui kommen buttons (steuern/sperren/auf lehrer-pc aufschalten)
    - dann irgendwie n bild/farbe oder ähnliches um zu prüfen ob der pc mit mir über vnc verbunden ist bzw. überhaupt an is

    das ganze mach ich weil ich keine so schrott-software wie net-op oder so benutzen will sondern das ganze mit vnc selber realisieren will!

    also das einzige problem is nun noch die statusanzeige!

    jemand ne idee? (also wegen mir auch irgendwie mit nem client der auf den schulungs-pcs läuft)

    danke schonmal an euch!

    greetz oli

  • also ich erhalte diesen fehler wenn
    1. der pc nicht existerit
    2. ich keine admin rechte habe
    3. wmi nicht läuft.

    • Offizieller Beitrag

    Hi,

    du legst du Clients in einen Share auf den du Zugriff von deinem Trainer-PC hast.

    Du startest die Clients (Schleife oder einzeln)
    Die Clients prüfen ob der Prozess läuft alle x Sekunden
    Wenn der Prozess läuft, dann schreiben sie in dem Share in eine Ini-datei

    Z.B.

    [Prozesse]
    bla=1
    blub=0

    0 = nicht vorhanden
    1 = vorhanden

    Diese ini-Dateien liest du in einer Schleife mit deinem Trainerprogramm.

    Wenn er ne 1 findet, dann zeigt er ein Bild an z.B. Grüner Haken
    Wenn er ne 0 liest, dann halt ein anderes Icon.

    So long,

    Mega

  • Hallo,

    genau hier liegt auch mein Problem

    Zitat

    Original von Aiden
    also ich erhalte diesen fehler wenn
    1. der pc nicht existerit
    2. ich keine admin rechte habe
    3. wmi nicht läuft.

    Was ist denn, wenn den entfernten Rechner mit anderen
    Credentials ansprechen möchte, als denen unter denen das Script läuft?
    Unter WMI lief das mit der Connect-Methode von ("SbemScripting.SWbemLocator")

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer ("RemoteRechnerName", "root/CIMV2", "User", "Passwort")

    Danach konnte man tolle WMI-Abfragen auf dem enfernten System machen:
    Set colItems = objService.ExecQuery("SELECT * FROM Win32_???")

    Also, wie bringe ich AutoIt bei für den Verbindungsaufbau zum entfernten WMI Namspace einen anderen Account zu verwenden?


    Gruß,
    exbge

  • Hallo exbge,

    habe ich im engl. AutoIt-Forum gefunden.

    $oLocator = ObjCreate("WbemScripting.SWbemLocator")
    $oLocator.Security_.AuthenticationLevel = 6

    $oWMIService = $oLocator.ConnectServer ($strComputer, "root\CIMV2", $username, $password, "", "", "128")

    $colItems = $oWMIService.ExecQuery ("SELECT * FROM Win32_????")

    If IsObj($colItems) then
    For $objItem In $colItems
    .
    .
    .

    Habe es ausprobiert, funzt einwandfrei. auch ueber Domainengrenzen hinweg. D.H. mit $username = "domaine\Username"
    Jetzt muesste man nur noch wissen, was Security_.AuthenticationLevel
    und "", "", "128") unter $oLocator.ConnectServer bedeutet.

    Einmal editiert, zuletzt von jschwarzb (11. Juli 2007 um 17:54)