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

Frage Entwicklung VB for Applications

Mitglied: megamazl

megamazl (Level 1) - Jetzt verbinden

22.08.2008, aktualisiert 23.08.2008, 8886 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
Notebook & Zubehör
Acpi.sys belastet durchgehend den CPU (20-30 Prozent)
Frage von ZhozhaNotebook & Zubehör12 Kommentare

Einen wunderschönen guten Tag liebe Kollegen, für mich ist der Tag leider nicht so wunderschön. Seit paar Tagen versuche ...

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 ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 StundeWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 3 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...