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
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:
; Generated by AutoIt Scriptomatic
[/autoit] [autoit][/autoit] [autoit]$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$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)
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
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
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
ich verzweifel noch an mir selbst
lg oli
Hi,
ganz einfach wäre, du legst eine Autoitexe in einen Share und dann startest du diese einfach von deinem Server aus. Die kann dir anschließend sagen, ob der Prozess läuft.
Das ganze in eine Schleife für alle Prozesse.
So long,
Mega
ok... und wie "sagt" mir das diese exe? n beispiel wär ned schlecht...
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
Wenn ich in Zeile 12 "localhost" durch RemotePC ersetze
Kommt Fehler Zeile (12) : ==> Variable must be of type "Object".:
Was mache ich falsch ??????
also ich erhalte diesen fehler wenn
1. der pc nicht existerit
2. ich keine admin rechte habe
3. wmi nicht läuft.
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
ZitatOriginal 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
schau dir mal psexec an
http://www.microsoft.com/technet/sysint…ies/psexec.mspx
damit kannst du das eigentlich komfortabel lösen
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.