Betriebssystem aller Clients im Netzwerk auslesen per Batchfile
In meinem Script prüfe ich per ping die Erreichbarkeit aller Clients im Netzwerk und möchte gleich das installierte Betriebssystem mit auslesen.
Danke und Gruß
Danke und Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 19041
Url: https://administrator.de/forum/betriebssystem-aller-clients-im-netzwerk-auslesen-per-batchfile-19041.html
Ausgedruckt am: 22.02.2025 um 14:02 Uhr
12 Kommentare
Neuester Kommentar
hatten wir hier schon einmal ...................
schau mal unter: W2K und XP Service Pack Versionen im Netzwerk auslesen , bzw. direkt unter: http://www.loginter.net/de/loginventory.php
schau mal unter: W2K und XP Service Pack Versionen im Netzwerk auslesen , bzw. direkt unter: http://www.loginter.net/de/loginventory.php
Hallo,
hab vor kurzem ein Tool zur Inventarisierung von Netzwerken gefunden, das mich sowohl von den Funktionen, als auch vom Preis her sehr überzeugt hat.
siehe http://www.loginventory.de
Freundliche Grüße
hab vor kurzem ein Tool zur Inventarisierung von Netzwerken gefunden, das mich sowohl von den Funktionen, als auch vom Preis her sehr überzeugt hat.
siehe http://www.loginventory.de
Freundliche Grüße
Moin worker734,
...mit %OS% statt %OSVERSION%....
... funk-ti-o-niert es.
Ist im IT-Bereich ein wichtiges Detail, ob das Problem eine "Funktionsstörung" oder ein "Funkloch" ist.
Unterschiedliche Lösungsansätze.
Wenn Du auch noch die ServicePacks brauchst, geht das auch per Batch, aber wozu???
Mach sowas doch punktuell (also die Problemfälle suchen) vom Server aus mit der Search.vbs aus den Support-Tools:
For /f "tokens=1,2,3,4" %%i in ('CScript nologo C:\M$\SupportTools\search.vbs "LDAP:dc=meine,dc=meinefirma,dc=com" /Q /C:"&(ObjectCategory=computer)(operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 1)"^| find /i " obje"') do ECHO %%j
[der merkwürdige Suchstring "obje" == "objects." in US-Version, "Objekte." in dt.; ggf. prüfen]
HTH Biber
Echo %1% : %OSVERSION% >> %root%osversion.log
nur dass das nicht geht!
Ist im IT-Bereich ein wichtiges Detail, ob das Problem eine "Funktionsstörung" oder ein "Funkloch" ist.
Unterschiedliche Lösungsansätze.
Wenn Du auch noch die ServicePacks brauchst, geht das auch per Batch, aber wozu???
Mach sowas doch punktuell (also die Problemfälle suchen) vom Server aus mit der Search.vbs aus den Support-Tools:
For /f "tokens=1,2,3,4" %%i in ('CScript nologo C:\M$\SupportTools\search.vbs "LDAP:dc=meine,dc=meinefirma,dc=com" /Q /C:"&(ObjectCategory=computer)(operatingsystem=Windows XP Professional)(operatingsystemservicepack=service pack 1)"^| find /i " obje"') do ECHO %%j
[der merkwürdige Suchstring "obje" == "objects." in US-Version, "Objekte." in dt.; ggf. prüfen]
HTH Biber
@Worker734, @Janni
Sorry, hab vorhin vor mich hin geschnarcht... Freitag nachmittag, Biorhythmustief etc.
Also, ihr habt natürlich recht -alles dummes Zeug.
In "Batch und Shell" hat Schuladmin mal ein GetOSVersion-Tutorial gepostet. Da steht ales in ausführlich drin.
Im native Batch geht es ungefähr so (Win9x lass ich mal raus):
Zumindest etwas Unterscheidbares. Also diesen String auswerten.
Diese Winzdatei mit find durchsuchen und entsprechend "WinNT", Win2k", "WinXP" ins Log schreiben.
Hope That Fits
Biber
Sorry, hab vorhin vor mich hin geschnarcht... Freitag nachmittag, Biorhythmustief etc.
Also, ihr habt natürlich recht -alles dummes Zeug.
In "Batch und Shell" hat Schuladmin mal ein GetOSVersion-Tutorial gepostet. Da steht ales in ausführlich drin.
Im native Batch geht es ungefähr so (Win9x lass ich mal raus):
ver ... bringt 3-4 Zeilen Output, meist 2 leere dabei.
Eine davon enthält "Microsoft Windows 2000 ..." oder XP oder ähnliches.Zumindest etwas Unterscheidbares. Also diesen String auswerten.
ver|find "Win" >%temp%\irgendwas.txt
..die entscheidende Zeile bleibt über.Diese Winzdatei mit find durchsuchen und entsprechend "WinNT", Win2k", "WinXP" ins Log schreiben.
Hope That Fits
Biber
Auch wenn du mir ein wenig unfreundlich rüber kommst 
On Error Resume Next
Const WbemAuthenticationLevelPktPrivacy = 6
strUser = InputBox("Please enter the user name: ")
strPassword = InputBox ("Please enter the Passwort: ")
strNamespace = "root\cimv2"
'Wiederholt so lange Host erreichbar ist bzw nicht unbekannter host als Meldung erscheint!
do
strComputer = InputBox ("Please enter the name of the computer you want to connect to: ")
If strComputer = "" Then
do
strComputer = InputBox("Please enter correct Computername: ")
loop until strComputer <> "" OR strComputer = False
End If
'Erreichbarkeit des PC's testen - Ping==================
Set objShell = CreateObject("WScript.Shell")
strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & "" 'Ping ausführen
Set objExecObject = objShell.Exec(strCommand)
'=======================================================
Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadAll()
If Instr(strText, "Anforderung") > 0 Then
objshell.popup "Host " & strComputer & " nicht erreichbar!",3
elseif Instr(strText, "Unbekannter Host " & strComputer & ".") <> 0 then
objshell.popup "Host " & strComputer & " nicht erreichbar!",3
end if
loop
loop while Instr(strText, "Unbekannter Host " & strComputer & ".")<>0 OR Instr(strText, "Anforderung") > 0
'=======================================================
'Verbindung zum WMI Namespace herstellen================
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'=======================================================
Function GetWMIServices()
Set GetWMIServices = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & strNamespace)
End Function
Set objWMIService = GetWMIServices()
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
For Each objItem In colItems
Message = Message & ("BuildNumber: " & objItem.BuildNumber) &vbcrlf
Message = Message & ("Caption: " & objItem.Caption) &vbcrlf
Message = Message & ("CSDVersion: " & objItem.CSDVersion) &vbcrlf
Message = Message & ("CSName: " & objItem.CSName) &vbcrlf
Next
wscript.echo Message
Speichern unter *.vbs
Du brauchst Adminrechte auf dem auszulesenen PC. Die Daten werden am Anfang abgefragt.
Entweder schreibst du dir noch ne Datei wo du alle Clients auflistest und dir dann einliest und die Ergebnisse in einer anderen Datei speicherst, oder du liest die namen alle aus deinem, wenn vorhanden, AD aus.
On Error Resume Next
Const WbemAuthenticationLevelPktPrivacy = 6
strUser = InputBox("Please enter the user name: ")
strPassword = InputBox ("Please enter the Passwort: ")
strNamespace = "root\cimv2"
'Wiederholt so lange Host erreichbar ist bzw nicht unbekannter host als Meldung erscheint!
do
strComputer = InputBox ("Please enter the name of the computer you want to connect to: ")
If strComputer = "" Then
do
strComputer = InputBox("Please enter correct Computername: ")
loop until strComputer <> "" OR strComputer = False
End If
'Erreichbarkeit des PC's testen - Ping==================
Set objShell = CreateObject("WScript.Shell")
strCommand = "%comspec% /c ping -n 3 -w 1000 " & strComputer & "" 'Ping ausführen
Set objExecObject = objShell.Exec(strCommand)
'=======================================================
Do While Not objExecObject.StdOut.AtEndOfStream
strText = objExecObject.StdOut.ReadAll()
If Instr(strText, "Anforderung") > 0 Then
objshell.popup "Host " & strComputer & " nicht erreichbar!",3
elseif Instr(strText, "Unbekannter Host " & strComputer & ".") <> 0 then
objshell.popup "Host " & strComputer & " nicht erreichbar!",3
end if
loop
loop while Instr(strText, "Unbekannter Host " & strComputer & ".")<>0 OR Instr(strText, "Anforderung") > 0
'=======================================================
'Verbindung zum WMI Namespace herstellen================
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = objwbemLocator.ConnectServer (strComputer, strNamespace, strUser, strPassword)
objWMIService.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy
'=======================================================
Function GetWMIServices()
Set GetWMIServices = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & strNamespace)
End Function
Set objWMIService = GetWMIServices()
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
For Each objItem In colItems
Message = Message & ("BuildNumber: " & objItem.BuildNumber) &vbcrlf
Message = Message & ("Caption: " & objItem.Caption) &vbcrlf
Message = Message & ("CSDVersion: " & objItem.CSDVersion) &vbcrlf
Message = Message & ("CSName: " & objItem.CSName) &vbcrlf
Next
wscript.echo Message
Speichern unter *.vbs
Du brauchst Adminrechte auf dem auszulesenen PC. Die Daten werden am Anfang abgefragt.
Entweder schreibst du dir noch ne Datei wo du alle Clients auflistest und dir dann einliest und die Ergebnisse in einer anderen Datei speicherst, oder du liest die namen alle aus deinem, wenn vorhanden, AD aus.