Umfangreiches Projekt zum Ermitteln des Arbeitsspeicherumfangs eines PCs
Hallöchen, ich bin neu hier
Ich bin derzeit Praktikantin in einer etwas größeren Firma die Diverse PCs und Server für Firmen bereitstellt.
Nun habe ich eine Aufgabe bekommen, die vom Umfang her für meine Kenntnisse doch ein wenig hoch ist, aber da ich ein ehrgeiziger Mensch bin möchte ich mich doch daran versuchen.
Hier erstmal grob was gemacht werden sollte:
Bei einigen Kunden der Firma stehen noch recht alte PCs, die Kunden beklagen sich das diese zu langsam sind.
Ich muss nun also mit einer Batch/cmd Datei herrausfinden, wie groß der Arbeitsspeicher der Rechner ist.
Das ganze lässt sich recht einfach mit dem Programm CPUz machen, dies kann eine Text datei oder HTML Datei erstellen, in der man dann auch die Größe des Arbeitsspeichers einsehen kann.
Leider kann ich es nicht mit Windows Internen Programmen machen, da das ganze wie gesagt über eine Batch Datei laufen soll.
Das Problem dabei ist nämlich, das die PCs meistens Windows 2000 installiert haben und dort gibt es meines Wissens nach keinen Befehl der einem die Grundsätzlichen Systemkomponenten anzeigen kann. Einige wenige PCs haben Windows XP installiert, bei XP gibt es ja den CMD Befehl systeminfo, dieser gibt eine kleine Übersicht über die Systemkomponenten und ist auch Remotefähig.
Die Clients sind mit einem Server verbunden der entweder Windows 2000 Server oder Windows 2003 Server nutzt.
Da man aber nicht sofort die ganzen IP-Adressen parat hat und nicht weiß, wie viele PCs den nun am Server hängen, muss man sich das erst besorgen.
Unter "C:\WINDOWS\system32\drivers\etc" gibt es eine Datei mit dem Namen "hosts" (Ohne eine Endung), in dieser sind alle mit dem Server verbundenen PCs in Form von IP-Adressen aufgeführt.
Das müssten so grob die Rahmenbedingungen sein.
Was die Batch Datei nun also können sollte:
Sie soll auf dem Server liegen
Die "hosts" Datei auslesen
IP-Adressen aus dieser Datei Auslesen (Vielleicht in eine Text Datei verfrachten)
Jede einzelne IP-Adresse abfragen nach der Größe des Arbeitsspeichers
Das in eine Textdatei verfrachten und auf dem Server hinterlegen
Ehrlich gesagt weiß ich nicht genau, ob das mit einer Batch-Datei lösbar ist, die Datei darf auch gerne ein anderes Programm aufrufen, aber es muss alles Automatisch funktionieren.
(Deshalb die Verwendung von CPUz, dies kann mit dem Parameter -txt=system eine Textdatei mit dem Name System ausgeben der einen kleinen Überblick über die Systeme verschafft und bleibt gleichzeitig "unsichtbar" (Silent))
Ich hoffe das man mir hier soweit folgen kann was genau ich machen muss, besser kann ich es im moment nicht erklären.
Anmerkung ist noch das Firewalls keine Probleme machen werden, dafür ist schon gesorgt.
Ich glaube das es besser ist, erst die einzelnen Schritte zu verwirklichen als sich sofort auf das gesamte "Programm" zu stürzen.
Für die ganze Sache habe ich ungefähr 16 Wochentage Zeit und es ist keine Pflicht, aber ich würde es trotzdem gern versuchen
Ich bin über jeden Ratschlag hocherfreut und werde so schnell wie Möglich antworten.
Außerdem habe ich hier vor Ort einen Server an dem 2 Clients dranhängen, mit dessen Hilfe kann ich alles testen.
Nun, das wäre es von meiner Seite gewesen, nun warte ich auf eure Antworten, Ratschläge etc.
LG Teraphine
Ich bin derzeit Praktikantin in einer etwas größeren Firma die Diverse PCs und Server für Firmen bereitstellt.
Nun habe ich eine Aufgabe bekommen, die vom Umfang her für meine Kenntnisse doch ein wenig hoch ist, aber da ich ein ehrgeiziger Mensch bin möchte ich mich doch daran versuchen.
Hier erstmal grob was gemacht werden sollte:
Bei einigen Kunden der Firma stehen noch recht alte PCs, die Kunden beklagen sich das diese zu langsam sind.
Ich muss nun also mit einer Batch/cmd Datei herrausfinden, wie groß der Arbeitsspeicher der Rechner ist.
Das ganze lässt sich recht einfach mit dem Programm CPUz machen, dies kann eine Text datei oder HTML Datei erstellen, in der man dann auch die Größe des Arbeitsspeichers einsehen kann.
Leider kann ich es nicht mit Windows Internen Programmen machen, da das ganze wie gesagt über eine Batch Datei laufen soll.
Das Problem dabei ist nämlich, das die PCs meistens Windows 2000 installiert haben und dort gibt es meines Wissens nach keinen Befehl der einem die Grundsätzlichen Systemkomponenten anzeigen kann. Einige wenige PCs haben Windows XP installiert, bei XP gibt es ja den CMD Befehl systeminfo, dieser gibt eine kleine Übersicht über die Systemkomponenten und ist auch Remotefähig.
Die Clients sind mit einem Server verbunden der entweder Windows 2000 Server oder Windows 2003 Server nutzt.
Da man aber nicht sofort die ganzen IP-Adressen parat hat und nicht weiß, wie viele PCs den nun am Server hängen, muss man sich das erst besorgen.
Unter "C:\WINDOWS\system32\drivers\etc" gibt es eine Datei mit dem Namen "hosts" (Ohne eine Endung), in dieser sind alle mit dem Server verbundenen PCs in Form von IP-Adressen aufgeführt.
Das müssten so grob die Rahmenbedingungen sein.
Was die Batch Datei nun also können sollte:
Sie soll auf dem Server liegen
Die "hosts" Datei auslesen
IP-Adressen aus dieser Datei Auslesen (Vielleicht in eine Text Datei verfrachten)
Jede einzelne IP-Adresse abfragen nach der Größe des Arbeitsspeichers
Das in eine Textdatei verfrachten und auf dem Server hinterlegen
Ehrlich gesagt weiß ich nicht genau, ob das mit einer Batch-Datei lösbar ist, die Datei darf auch gerne ein anderes Programm aufrufen, aber es muss alles Automatisch funktionieren.
(Deshalb die Verwendung von CPUz, dies kann mit dem Parameter -txt=system eine Textdatei mit dem Name System ausgeben der einen kleinen Überblick über die Systeme verschafft und bleibt gleichzeitig "unsichtbar" (Silent))
Ich hoffe das man mir hier soweit folgen kann was genau ich machen muss, besser kann ich es im moment nicht erklären.
Anmerkung ist noch das Firewalls keine Probleme machen werden, dafür ist schon gesorgt.
Ich glaube das es besser ist, erst die einzelnen Schritte zu verwirklichen als sich sofort auf das gesamte "Programm" zu stürzen.
Für die ganze Sache habe ich ungefähr 16 Wochentage Zeit und es ist keine Pflicht, aber ich würde es trotzdem gern versuchen
Ich bin über jeden Ratschlag hocherfreut und werde so schnell wie Möglich antworten.
Außerdem habe ich hier vor Ort einen Server an dem 2 Clients dranhängen, mit dessen Hilfe kann ich alles testen.
Nun, das wäre es von meiner Seite gewesen, nun warte ich auf eure Antworten, Ratschläge etc.
LG Teraphine
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 89681
Url: https://administrator.de/contentid/89681
Ausgedruckt am: 24.11.2024 um 07:11 Uhr
27 Kommentare
Neuester Kommentar
Moin,
machs Dir doch nicht so schwer und wirf mal einen Blick auf:
PS: Ist schon ein schwaches Bild, wenn in Eurem Laden keiner weiß, welche IP-Adressen die Kisten haben und wieviele es davon überhaupt gibt. Und die Lösung, alle Adressen in der host-Datei zu pflegen ist gelinde gesagt "suboptimal".
Gruß J chem
machs Dir doch nicht so schwer und wirf mal einen Blick auf:
PS: Ist schon ein schwaches Bild, wenn in Eurem Laden keiner weiß, welche IP-Adressen die Kisten haben und wieviele es davon überhaupt gibt. Und die Lösung, alle Adressen in der host-Datei zu pflegen ist gelinde gesagt "suboptimal".
Gruß J chem
Hi und willkommen,
gib mal
Damit kriegst du mit Boardmitteln sehr viele Infos des Systems heraus.
Das würde ich mal bei den Anwendern ins Loginskript schreiben.
Das Auslesen der hosts (wtf) hat die denn erstellt - gibts keinen DNS Server? - würde ich nicht wirklich machen.
Was passiert, wenn einer der Rechner aus ist?
Alternativ - ohne Boardmittel - schau mal nach dieser Anleitung
Gruß
gib mal
dxdiag /t \\server\freigabe\%computername%.txt
ipconfig -all >> \\server\freigabe\%computername%.txt
ein.ipconfig -all >> \\server\freigabe\%computername%.txt
Damit kriegst du mit Boardmitteln sehr viele Infos des Systems heraus.
Das würde ich mal bei den Anwendern ins Loginskript schreiben.
Das Auslesen der hosts (wtf) hat die denn erstellt - gibts keinen DNS Server? - würde ich nicht wirklich machen.
Was passiert, wenn einer der Rechner aus ist?
Alternativ - ohne Boardmittel - schau mal nach dieser Anleitung
Gruß
Die IP Adressen aus der hosts Datei kannst du in einer Batch per For Schleife so auslesen:
Was vielleicht auch eine Möglichkeit wäre, wenn due PCs startsyipts benutzen könntest du dort doch CPUz dort dan ausführen und die Dateien auf ein Verzeichnis des Servers speichern worauf alle Zugriff haben. Als Parameter kanst dud an angeben
FOR /F "eol=# delims= " %%i in ("%windir%\system32\drivers\etc\hosts") do echo %%i
Was vielleicht auch eine Möglichkeit wäre, wenn due PCs startsyipts benutzen könntest du dort doch CPUz dort dan ausführen und die Dateien auf ein Verzeichnis des Servers speichern worauf alle Zugriff haben. Als Parameter kanst dud an angeben
-txt=\\Serverfreigabe\%computername%.txt
So hast du dann wenn jeder PC mal hochgefahren wurde von jedem eine Datei mit seinen Komponenten.
hi,
du kannst es auch mit Spiceworks probieren. http://www.spiceworks.com
Ist ein kostenloses Inventarisierungstool. Einfach auf einen Rechner (z.B. Notebook) installieren, das Ding mit in die Domäne(n) hängen und scannen lassen.
Der gibt dir alle nötigen Infos in schön formatierten Berichten (Excel, CSV, PDF) zurück
du kannst es auch mit Spiceworks probieren. http://www.spiceworks.com
Ist ein kostenloses Inventarisierungstool. Einfach auf einen Rechner (z.B. Notebook) installieren, das Ding mit in die Domäne(n) hängen und scannen lassen.
Der gibt dir alle nötigen Infos in schön formatierten Berichten (Excel, CSV, PDF) zurück
Das war ungetestet gepostet.
So sollte es gehen:
Dabei liest der die hosts Datei aus.
Zeilen die mit einem # beginnen überspringt er.
Der Aufbau der hosts Datei ist ja nach folgendem Schema:
So sollte es gehen:
FOR /F "eol=# delims= " %%i in ('type "%windir%\system32\drivers\etc\hosts"') do echo %%i
Zeilen die mit einem # beginnen überspringt er.
Der Aufbau der hosts Datei ist ja nach folgendem Schema:
127.0.0.1 localhost
Es wird also immer das ausgelesen was am anfang der Zeile steht bis zum ersten Leerzeichen.
Hi,
ok dann mal anders.....
Von dieser Seite habe ich folgenden Schnippsel...
Wenn du das als memory.vbs abspeicherst und es mit
Nun gibt es sowohl die Variante das vbs temporär zu erstellen und jeweils den Computernamen (strComputer = ".") in dem Script zu ändern, oder per Psexec dieses vbs von einem Rechner zu starten und dort alle Systeme aus der hosts anzusteuern.
E.d.i.t. - vorne eine Leere Zeile gelöscht, die "hinten unbedingt drin sein muß.
Variante 1:
memory1.tmp
memory3.tmp
Jetzt müsstest du nur folgendes machen:
Und es gibt ganz sicher noch viele Wege / Varianten mehr. Aber dazu würde ich auch ganz gerne noch unsere beiden Spezialisten hören- abwarten und Tee trinken.
Und wegen der hosts - kopier dir die doch einfach und lösche die Kommentare -die mit ### anfangen.
ok dann mal anders.....
Von dieser Seite habe ich folgenden Schnippsel...
Option Explicit
Dim objWMIService, objComputer, colComputer
Dim strLogonUser, strComputer
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer
Wscript.Echo "System Name: " & objComputer.Name _
& vbCr & "Total RAM " & objComputer.TotalPhysicalMemory
Next
WScript.Quit
Wenn du das als memory.vbs abspeicherst und es mit
memory.vbs //NoLogo > C:\%computername%.txt
aufrufst - hast du für deinen Rechner strComputer = "." schon mal den Ramwert. (in der Datei C:\%computername%.txt)Nun gibt es sowohl die Variante das vbs temporär zu erstellen und jeweils den Computernamen (strComputer = ".") in dem Script zu ändern, oder per Psexec dieses vbs von einem Rechner zu starten und dort alle Systeme aus der hosts anzusteuern.
E.d.i.t. - vorne eine Leere Zeile gelöscht, die "hinten unbedingt drin sein muß.
Variante 1:
memory1.tmp
Option Explicit
Dim objWMIService, objComputer, colComputer
Dim strLogonUser, strComputer
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer
Wscript.Echo "System Name: " & objComputer.Name _
& vbCr & "Total RAM " & objComputer.TotalPhysicalMemory
Next
WScript.Quit
Jetzt müsstest du nur folgendes machen:
echo strComputer = "%computername%" > memory2.tmp
copy /b memory1.tmp + memory2.tmp + memory3.tmp memory.vbs
memory.vbs //NoLogo > C:\%computername%.txt
del /q memory?.tmp
del /q memory.vbs
Und es gibt ganz sicher noch viele Wege / Varianten mehr. Aber dazu würde ich auch ganz gerne noch unsere beiden Spezialisten hören- abwarten und Tee trinken.
Und wegen der hosts - kopier dir die doch einfach und lösche die Kommentare -die mit ### anfangen.
upps..
starte das vbs mal "alleine"
kommt da auch nix?
starte das vbs mal "alleine"
memory.vbs //NoLogo
kommt da auch nix?
ja -das ist in dem Fall klar - durch das weglassen von > C:\%computername%.txt nach dem .vbs Aufruf wird die datei auch nicht geschrieben und die Ausgabe sollte aber dann in einem Popoupfenster auftauchen.
Ich hab Hier W2k, da läuft es.
Probiers bitte mal mit
und
Ich hab Hier W2k, da läuft es.
Probiers bitte mal mit
Cscript memory.vbs
Anzeige incl. Script Host in der Dosboxund
Wscript memory.vbs
Popupfenster
Bitte folgendes in c:\host - als host.cmd abspeichern
Dazu noch die vorherigen Schnippsel memory1.tmp und memory3.tmp auch in den Ordner c:\host
Wenn du das nun laufen läßt, sollte in c:\host für jeden Rechner ein eigenes .vbs liegen (edit) UNd auch gestartet werden.
"weiter" hab ich die Idee nicht gesponnen, denn wenn ein Rechner nicht ansprechbar ist - gibts einen Fehler.
Von daher mußt du warten, bis jemand eine bessere Idee / Ansatz hat.
Bitte beachte - bei memory1.tmp muß am Ende eine Leere Zeile sein!
if not exist c:\host md c:\host
echo off
findstr 1 %windir%\system32\drivers\etc\hosts >c:\host\host.txt
FOR /f %%f IN (c:\host\host.txt) DO (@echo strComputer = "%%f" >c:\host\memory2.tmp
copy /b memory1.tmp + memory2.tmp + memory3.tmp %%f.vbs )
FOR /f %%f IN ('DIR /b c:\host\*.vbs') Do (cscript /nologo c:\host\%%f>>C:\host\komplett.txt)
Wenn du das nun laufen läßt, sollte in c:\host für jeden Rechner ein eigenes .vbs liegen (edit) UNd auch gestartet werden.
"weiter" hab ich die Idee nicht gesponnen, denn wenn ein Rechner nicht ansprechbar ist - gibts einen Fehler.
Von daher mußt du warten, bis jemand eine bessere Idee / Ansatz hat.
Bitte beachte - bei memory1.tmp muß am Ende eine Leere Zeile sein!
Als kleine Verbesserung könntest Du diese vbs Datei auch nur einmal erstellen und die IP Adresse als Parameter übergeben.
Das ganze würde dann so aussehen:
Die memory.vbs Datei:
Und die Batch dann so:
Das ganze würde dann so aussehen:
Die memory.vbs Datei:
Option Explicit
Dim objWMIService, objComputer, colComputer
Dim strLogonUser, strComputer
strComputer = "" & WScript.Arguments(0) & ""
if strComputer = "" then strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colComputer = objWMIService.ExecQuery _
("Select * from Win32_ComputerSystem")
For Each objComputer in colComputer
Wscript.Echo "System Name: " & objComputer.Name _
& vbCr & "Total RAM " & objComputer.TotalPhysicalMemory
Next
WScript.Quit
Und die Batch dann so:
@echo off
if not exist c:\host md c:\host
type %windir%\system32\drivers\etc\hosts >c:\host\host.txt
FOR /F "eol=# delims= " %%f in (c:\host\host.txt) DO (
echo PC %%f: >>C:\host\komplett.txt
cscript /nologo c:\host\memory.vbs %%f >>C:\host\komplett.txt
)
Hallo,
welcher in ähnlicher Form in win2k existiert, siehe:
Grüße, Steffen
bei XP gibt es ja den CMD Befehl systeminfo
welcher in ähnlicher Form in win2k existiert, siehe:
"C:\Programme\Gemeinsame Dateien\Microsoft Shared\MSInfo\msinfo32.exe" /?
Grüße, Steffen
Moin,
poste doch bitte mal das, was du bisher gebatcht hast. dann finden wir auch den Fehler.
Das "konstrukt geht davon aus, das alle Clients eine 1xxx.xxx.xxx.xxx als IP haben und das es einen Ordner c:\hosts gibt. (indem das Script liegt)
Ändere den Teil mal in \\server\freigabe und stelle vorher fest daß du mit dem Konto, daß psexec benutzt dort \\deinserver\deine Freigabe Rechte zum schreiben hast.
poste doch bitte mal das, was du bisher gebatcht hast. dann finden wir auch den Fehler.
findstr 1 %windir%\system32\drivers\etc\hosts >c:\host\host.txt
FOR /f %%f IN (c:\host\host.txt) DO (psexec usw)
FOR /f %%f IN (c:\host\host.txt) DO (psexec usw)
Das "konstrukt geht davon aus, das alle Clients eine 1xxx.xxx.xxx.xxx als IP haben und das es einen Ordner c:\hosts gibt. (indem das Script liegt)
Ändere den Teil mal in \\server\freigabe und stelle vorher fest daß du mit dem Konto, daß psexec benutzt dort \\deinserver\deine Freigabe Rechte zum schreiben hast.
ok,
ähmm nun hab ich aber eine Gegenfrage - bisher bin ich davon ausgegangen, daß die Hosts auf einem Server liegt - das was das script nun aber macht - ist:
Es prüft auf dem Client (den wir per Hosts ermittelt haben) die Hosts und führt dort auf alle anderen Clients, die in der Hosts sind das memory.vbs auf.
War das so gedacht? *grübel*
Und mach dir mal keine Sorgen wegen der Umrechnung, wenn die komplette Liste da ist, zur Not einfach mit Excel etwas rechnen oder nnoch mal eine Abfrage in der kompletten Liste.
Erstmal sollten wir die Liste bekommen, dann der nächste Schritt
edit:
ähmm nun hab ich aber eine Gegenfrage - bisher bin ich davon ausgegangen, daß die Hosts auf einem Server liegt - das was das script nun aber macht - ist:
Es prüft auf dem Client (den wir per Hosts ermittelt haben) die Hosts und führt dort auf alle anderen Clients, die in der Hosts sind das memory.vbs auf.
War das so gedacht? *grübel*
Und mach dir mal keine Sorgen wegen der Umrechnung, wenn die komplette Liste da ist, zur Not einfach mit Excel etwas rechnen oder nnoch mal eine Abfrage in der kompletten Liste.
Erstmal sollten wir die Liste bekommen, dann der nächste Schritt
edit:
Also ich verstehe dich gerade nicht ganz, aber ich poste erstmal alles so, wie ich es im moment habe
Ok - ich ging davon aus, das du noch diese Zeile drin hastfindstr 1 %windir%\system32\drivers\etc\hosts >c:\host\host.txt
Du nutzt aber die Variante, die das garnicht abfragt.
ok,
bevor das nun noch ellenlang nud damit undurchsichtiger wird,
1) Kopiere den Kram auf den Server.
2) Verbinde dich mit VNC auf den Server
3) Kopiere Teile der Hosts und speicher Sie im gleichen Ordner als test ab nachdem du nur noch 3 exemplarische System drin hast
4) Ändere überall in den Scripten wo host (ohne .txt) steht in test und lass das mal laufen.
bevor das nun noch ellenlang nud damit undurchsichtiger wird,
1) Kopiere den Kram auf den Server.
2) Verbinde dich mit VNC auf den Server
3) Kopiere Teile der Hosts und speicher Sie im gleichen Ordner als test ab nachdem du nur noch 3 exemplarische System drin hast
4) Ändere überall in den Scripten wo host (ohne .txt) steht in test und lass das mal laufen.