Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst CPU-Auslastung einlesen mit VBS und Datei erzeugen wenn unter 20 Prozent

Mitglied: megamazl

megamazl (Level 1) - Jetzt verbinden

22.08.2008, aktualisiert 23.08.2008, 8917 Aufrufe, 9 Kommentare

Hallo Administrator Gemeinde,

folgendes Vorhaben:
Ich habe ein Netzwerk mit 11 Rechnern. Einer ist der Zentralrechner auf dem Videos geschnitten werden. Diese Videos müssen danach noch umgewandelt werden. Dies soll auf den 10 anderen Rechnern geschehen. Allerdings müßte die Umcodierung so geregelt werden, daß der Zentralrechner die Videos mit Xcopy auf die anderen Rechner verteilt, wo sie dann mit einem Codierungsprogramm mit Watchfolder-Funktion umcodiert werden. Allerdings sollen diese Dateien natürlich nur kopiert werden, wenn der jeweilige Umcodierungsrechner nicht grade am arbeiten ist. Um das herauszufinden habe ich folgendes Script geschrieben, welches eine Datei erzeugen soll, wenn die Prozessorlast unter 20% ist. Wenn die Last über 20% ist, soll diese Datei wieder gelöscht werden. Somit kann mit einer einfachen "if exist" Abfrage des Zentralrechners überprüft werden, ob der Codierrechner besetzt ist.

01.
On Error Resume Next  
02.
 
03.
strComputer = "."  
04.
Set objWMIService = GetObject("winmgmts:" _  
05.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
06.
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")  
07.
For Each objItem in colItems  
08.
    Wscript.Echo "Load Percentage: " & objItem.LoadPercentage  
09.
Next 
10.
 
11.
If objItem.LoadPercentage <= 20 Then  
12.
Call ErstelleEineDatei 
13.
Else 
14.
Call Dateiloschen 
15.
End if 
16.
 
17.
Sub ErstelleEineDatei 
18.
   Dim fso, MeineDatei 
19.
   Set fso = CreateObject("Scripting.FileSystemObject") 
20.
   Set MeineDatei = fso.CreateTextFile("c:\CPUnotbusy.txt", True) 
21.
   MeineDatei.WriteLine("im moment keine codierung.") 
22.
   MeineDatei.Close 
23.
End Sub 
24.
 
25.
Sub Dateiloschen 
26.
Set fso = CreateObject("Scripting.FileSystemObject") 
27.
fso.GetFile("c:\CPUnotbusy.txt").Delete 
28.
End Sub
Allerdings funktioniert diese Script noch nicht so richtig, wenn die Last unter 20% ist, wird wohl eine Datei erzeugt, ist sie über 20% wird die Datei allerdings nicht wieder gelöscht.

Hat jemand eine Idee?
Wahrscheinlich ein dummer Fehler, hab mir VBS heute zum ersten Mal angeschaut.
Mitglied: bastla
23.08.2008 um 00:35 Uhr
Hallo megamazl!

Bedingt durch das "On Error Resume Next" wird keine Fehlermeldung angezeigt und nach der fehlerhaften Zeile einfach fortgesetzt, weswegen immer "Call ErstelleEineDatei" zum Zug kommt - Du solltest daher die "On Error"-Zeile erst nach dem (erfolgreichen ) Testen in das Script aufnehmen.

Das Problem liegt darin, dass "objItem.LoadPercentage" nur innerhalb der "For Each"-Schleife zur Verfügung steht - die entsprechende Fehlermeldung "C:\Scripts\FlagFile.vbs(11, 1) Laufzeitfehler in Microsoft VBScript: Objekt erforderlich: 'objItem' hätte dies leichter erkennbar gemacht.

Die Lösung ist aber einfach: Schreibe den entsprechenden Prozentsatz innerhalb der Schleife in eine Variable, oder setze gleich die Abfrage selbst in die Schleife.

Version 1 sähe so aus:
01.
... 
02.
For Each objItem in colItems 
03.
    LoadPercentage = objItem.LoadPercentage 
04.
    WScript.Echo  "Load Percentage: " & LoadPercentage 
05.
Next 
06.
 
07.
If LoadPercentage <= 20 Then 
08.
...
Sind das übrigens Single-Core-Prozessoren? Wenn Du mehrere Kerne zur Verfügung hast, werden in der Schleife die Werte der einzelnen Kerne nacheinander ausgegeben. Falls Du dann die Gesamtauslastung ermitteln möchtest, ginge das so:
01.
... 
02.
TotalLoadPercentage = 0 
03.
For Each objItem in colItems 
04.
    LoadPercentage = objItem.LoadPercentage 
05.
    WScript.Echo  "Load Percentage: " & objItem.LoadPercentage 
06.
    TotalLoadPercentage = TotalLoadPercentage + LoadPercentage  
07.
Next 
08.
 
09.
If TotalLoadPercentage <= 20 Then 'oder 40/80, da ja 200% oder 400% Gesamtwert möglich 
10.
...
Grüße
bastla
Bitte warten ..
Mitglied: megamazl
23.08.2008 um 21:00 Uhr
super, vielen Dank mit:
01.
On Error Resume Next  
02.
 
03.
strComputer = "."  
04.
Set objWMIService = GetObject("winmgmts:" _  
05.
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")  
06.
Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")  
07.
 
08.
TotalLoadPercentage = 0  
09.
For Each objItem in colItems  
10.
    LoadPercentage = objItem.LoadPercentage  
11.
    WScript.Echo  "Load Percentage: " & objItem.LoadPercentage  
12.
    TotalLoadPercentage = TotalLoadPercentage + LoadPercentage   
13.
Next  
14.
    
15.
If TotalLoadPercentage <= 20 Then  
16.
Call ErstelleEineDatei()  
17.
Else  
18.
Call Dateiloschen()  
19.
End if  
20.
 
21.
Public Sub ErstelleEineDatei() 
22.
   Dim fso, MeineDatei 
23.
   Set fso = CreateObject("Scripting.FileSystemObject") 
24.
   Set MeineDatei = fso.CreateTextFile("c:\CPUnotbusy.txt", True) 
25.
   MeineDatei.WriteLine("im moment keine codierung.") 
26.
   MeineDatei.Close 
27.
End Sub 
28.
 
29.
Public Sub Dateiloschen() 
30.
Set fso = CreateObject("Scripting.FileSystemObject") 
31.
fso.GetFile("c:\CPUnotbusy.txt").Delete 
32.
End Sub
klappt es bestens.

Ich habe mir jetzt eine Batch geschrieben die so aussieht:
01.
:run  
02.
cpu.vbs 
03.
sleep 60 
04.
goto run
Jetzt bräuchte ich eine stop.bat die den Prozess beendet und die die evtl. vorhandene CPUnotbusy.txt löscht. Das Problem ist jetzt, wie krieg ich den jetzt die im Loop laufende cmd.exe gelöscht? Wenn ich das über den Kill Befehl laufen lassen will, funktioniert das nicht.

Danke im voraus.
Bitte warten ..
Mitglied: bastla
23.08.2008 um 21:24 Uhr
Hallo megamazl!

Jetzt bräuchte ich eine stop.bat die den Prozess beendet und die die evtl. vorhandene CPUnotbusy.txt löscht.
Welchen Prozess willst Du unter welcher Bedingung beenden?

Grüße
bastla
Bitte warten ..
Mitglied: megamazl
23.08.2008 um 21:40 Uhr
wenn ich die START.bat starte, wird ja die cpu.vbs gestartet und alle 60 Sekunden wiederholt. Die cpu.vbs startet ja als cmd.exe, da sie im Batch läuft. Und genau diese cmd.exe möchte ich mit einer STOP.bat beenden und die CPUnotbusy.txt löschen, falls diese im Moment existiert. Wenn ich aber per "kill cmd.exe" versuche die cmd.exe zu beenden passiert nichts, die STOP.bat läuft ja ebenfalls in einer cmd.exe. Ich bräuchte sozusagen einen Identifier für genau diese gestartete cmd.exe.
Bitte warten ..
Mitglied: bastla
23.08.2008 um 21:51 Uhr
Hallo megamazl!

Das ist mir nicht klar ...

Zum Einen wird die "cpu.vbs" durch "cscript.exe" oder, defaultmäßig, "wscript.exe" (nicht aber durch "cmd.exe") ausgeführt, zum Anderen läuft das VBScript ja nur einmal durch und Du hast danach eine "CPUnotbusy.txt" oder eben nicht - das kannst Du ja im Batch (vor dem "sleep") mit "if exist" abfragen und dementsprechend weiter verfahren - oder übersehe ich etwas?

Grüße
bastla
Bitte warten ..
Mitglied: megamazl
23.08.2008 um 22:05 Uhr
ja, ok, die cpu.vbs läuft natürlich im cscript.exe, aber da ja fortwährend die Prozessorlast abgefragt werden soll, um zu überprüfen ob der Rechner grade am codieren ist, soll die cpu.vbs natürlich im Loop ablaufen. Und genau diese Batchdatei (START.bat, siehe oben) läuft ja unter cmd.exe. Die START.bat soll ja wirklich stundenlang laufen während der Rechner codiert. Erst wenn der Rechner nach ca. 2 oder 3 Stunden mit dem Videofile fertig ist, soll die CPUnotbusy.txt wieder erstellt werden. Wenn ich jetzt nur die cscript.exe killen würde, würde sie im nächstem Durchgang nach sleep ja wieder erstellt würden.
Allerdings soll man auch eben mit dieser STOP.bat die laufende START.bat beenden können und damit auch die CPUnotbusy.txt löschen, damit nicht aus Versehen Dateien kopiert werden.
Bitte warten ..
Mitglied: bastla
23.08.2008 um 22:27 Uhr
Hallo megamazl!

Allerdings soll man auch eben mit dieser STOP.bat die laufende START.bat beenden können und damit auch die CPUnotbusy.txt löschen, damit nicht aus Versehen Dateien kopiert werden.
Da stellt sich natürlich die Frage: Wie wird die STOP.bat gestartet?

Trotzdem ein Ansatz:
Wenn Du in der START.bat (übrigens ist es nicht zu empfehlen, Batches Namen von CMD-Befehlen zu geben) eine Zeile
01.
title ##CheckCPU##
an den Anfang stellst, würde ein
01.
taskkill /F /FI "WINDOWTITLE eq ##CheckCPU##" /T
genügen - allerdings gibt es "taskkill" erst seit XP, und ich vermute (wissen kann ich's ja nicht ), dass Du W2000 verwendest ...

Grüße
bastla
Bitte warten ..
Mitglied: megamazl
23.08.2008 um 22:37 Uhr
juhuuuu, vielen vielen Dank, es funktioniert.
Übrigens ich hab XP Pro. wünsche die ein frohes Wochenende
Bitte warten ..
Mitglied: bastla
23.08.2008 um 22:45 Uhr
Hallo megamazl!

Übrigens ich hab XP Pro
Schade eigentlich - jetzt hätte ich gerade einen Ansatz für W2000 ...

... den ich aber trotzdem poste:
Dazu müsste die "starter.bat" mit einem Parameter gestartet werden, also etwa
01.
start starter.bat ##CheckCPU##
Danach könnte per VBScript die verwendete Commandline (bzw der relevante Teil) zum Finden und dann Terminieren (klingt weniger brutal als "Killen" ) des Prozesses verwendet werden, also etwa:
01.
strComputer = "."  
02.
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")  
03.
Set colItems = objWMIService.ExecQuery( _ 
04.
   "SELECT * FROM Win32_Process WHERE CommandLine LIKE '%##CheckCPU##%'",,48)  
05.
For Each objItem in colItems  
06.
    objItem.Terminate 
07.
Next
Natürlich sollte die Kennung (also etwa "##CheckCPU##") so gewählt werden, dass es keine Verwechslung mit einem anderen Prozess geben kann (gilt auch für die "taskkill"-Variante).

Grüße
bastla

P.S.: Auf W2000 hatte ich getippt, weil Du "kill" verwenden wolltest ...
Bitte warten ..
Ähnliche Inhalte
Microsoft

Server 2012 cpu Auslastung durchgehend bei 10 prozent

Frage von thomasreischerMicrosoft1 Kommentar

Hallo, Ich habe hier einen bare metal Server 2012, auf dem die Rollen Ad, dns, dhcp und rdp laufen. ...

Windows 7

RAM Auslastung bei 80 Prozent

gelöst Frage von xbast1xWindows 79 Kommentare

Hallo zusammen, ein Kollege hat das Problem, dass seit einer Woche das Notebook oft langsam ist. Ich habe festgestellt, ...

Hyper-V

Verständnisfrage zu CPU Auslastung

Frage von AndreasOCHyper-V5 Kommentare

Hallo zusammen, ich bei uns einen Server mit mehreren VMs. Nun beschwerten sich ein paar Leute das eine VM ...

Switche und Hubs

SG300 Routing und CPU Auslastung

Frage von mario89Switche und Hubs5 Kommentare

Hallo Leute, nachdem ich von eurer Seite das letzte mal schon sehr gute Hilfestellungen bekommen habe, muss ich mich ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 1 TagWindows 105 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 1 TagAdministrator.de Feedback18 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 2 TagenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...

Hyper-V
Hyper-V mit altem XEON-Server. Was ist falsch?
Frage von LollipopHyper-V11 Kommentare

Hallo Bin etwas frustriert. Kleinbetrieb, ca. 15 PC's, 2 Stk. Server mit einigen virtuellen PC's für Fernwartung, VaultServer für ...