36539
16.05.2008, aktualisiert um 21:15:15 Uhr
20528
6
0
WIN-Betriebssystem, ServicePack und Sprache ermitteln
Hallo,
ich suche eine Möglichkeit sowohl das WIN-Betriebssystem, das ServicePack und die Sprache des OS (nur Deutsch oder Englisch) zu ermitteln und die 3 Angaben in jeweils eigene Variablen zu speichern. Ich möchte das Script in eine Batch einbauen und die Variablen in der Batch weiterverwenden.
Ich habe keine Ahnung von Scriptprogrammierung habe aber mal eine Vorlage "osfind.vbs" gefunden.
Damit kann ich mir das installierte WIN-Betriebsystem inkl. SP-Angabe anzeigen lassen und über
auch an die Variable %winvers% übergeben und in der Batch weiterverwenden.
Nachteile bisher:
1.
Ich kann damit noch nicht zwischen Deutsch und Englisch unterscheiden
2.
Ich weiß nicht wie ich in VBScript das Betriebssystem, ServicePack und Sprachversion (als DE oder ENG) in eigene/getrennte Variablen übergeben kann.
3.
Schönheitsfehler bei "Wscript.Echo objOperatingSystem.Caption & " SP " & objOperatingSystem.ServicePackMajorVersion"
Ab WIN Vista enthält objOperatingSystem.Caption auch ein Copy- und TM-Zeichen.
Bei der Batchausgabe wird aber das TM nicht korrekt dargestellt.
So kommt es in der Batch z. Bsp. zur Ausgabe von --> Microsoft© Windows VistaT Ultimate SP 1
Für die Sprache habe ich nur das nachfolgende Script gefunden:
Das Script gibt mir nur Zahlenwerte aus, nutz mir also so nichts. Es sei denn ich wüste die Zahlenwerte für DE und ENG aus
Dann könnte ich das Ganze per Vergleich von Zahlenwert auf Wortwert "DE" oder "ENG" in der Variablen tauschen oder gleich direkt über den Zahlenwert weiterbearbeiten.
Enthält die Sprachwert-Variable nicht den Wert "DE" oder "ENG" lasse ich meine Batch abbrechen. Ansonsten wird in Abhängiogkeit vom Wert in der Batch weitergearbeitet.
Könnt ihr mir hierbei bitte helfen und mir aus den vorstehenden Script-fragmenten 1 Script so bauen das es mir in der Batch die schon genannten/gewünschten 3 Variablen liefert?
Vielen Dank
onegasee59
ich suche eine Möglichkeit sowohl das WIN-Betriebssystem, das ServicePack und die Sprache des OS (nur Deutsch oder Englisch) zu ermitteln und die 3 Angaben in jeweils eigene Variablen zu speichern. Ich möchte das Script in eine Batch einbauen und die Variablen in der Batch weiterverwenden.
Ich habe keine Ahnung von Scriptprogrammierung habe aber mal eine Vorlage "osfind.vbs" gefunden.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Wscript.Echo objOperatingSystem.Caption & " SP " & objOperatingSystem.ServicePackMajorVersion
Next
Damit kann ich mir das installierte WIN-Betriebsystem inkl. SP-Angabe anzeigen lassen und über
for /f "tokens=*" %%a in ('cscript //nologo "%startpfad%osfind.vbs"') do set "winvers=%%a"
Nachteile bisher:
1.
Ich kann damit noch nicht zwischen Deutsch und Englisch unterscheiden
2.
Ich weiß nicht wie ich in VBScript das Betriebssystem, ServicePack und Sprachversion (als DE oder ENG) in eigene/getrennte Variablen übergeben kann.
3.
Schönheitsfehler bei "Wscript.Echo objOperatingSystem.Caption & " SP " & objOperatingSystem.ServicePackMajorVersion"
Ab WIN Vista enthält objOperatingSystem.Caption auch ein Copy- und TM-Zeichen.
Bei der Batchausgabe wird aber das TM nicht korrekt dargestellt.
So kommt es in der Batch z. Bsp. zur Ausgabe von --> Microsoft© Windows VistaT Ultimate SP 1
Für die Sprache habe ich nur das nachfolgende Script gefunden:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
For Each objItem In colItems
WScript.Echo "Country Code: " & objItem.CountryCode
WScript.Echo "Locale: " & objItem.Locale
WScript.Echo "OS Language: " & objItem.OSLanguage
WScript.Echo "Code Set: " & objItem.CodeSet
Next
Das Script gibt mir nur Zahlenwerte aus, nutz mir also so nichts. Es sei denn ich wüste die Zahlenwerte für DE und ENG aus
"OS Language: " & objItem.OSLanguage.
Enthält die Sprachwert-Variable nicht den Wert "DE" oder "ENG" lasse ich meine Batch abbrechen. Ansonsten wird in Abhängiogkeit vom Wert in der Batch weitergearbeitet.
Könnt ihr mir hierbei bitte helfen und mir aus den vorstehenden Script-fragmenten 1 Script so bauen das es mir in der Batch die schon genannten/gewünschten 3 Variablen liefert?
Vielen Dank
onegasee59
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 87812
Url: https://administrator.de/contentid/87812
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
6 Kommentare
Neuester Kommentar
Die OSLanguage Werte findest Du unter http://msdn.microsoft.com/en-us/library/aa394239.aspx
Um es in 3 getrennte Variablen zu speichern, mach doch einfach 3 VB-Skripte die jeweils einen Wert ausgeben.
Um es in 3 getrennte Variablen zu speichern, mach doch einfach 3 VB-Skripte die jeweils einen Wert ausgeben.
Moin onegasee59,
die beiden VBS-Schnipsel kannst naturlich zu einem zusammendampfen und damit...
... diese reduzierte Ausgabe erhalten:
Aber bei der Frage nach "Deutsch" oder "Englisch" wirst Du über diesen Weg IMHO nur Näherungswerte bekommen.
Weil Du mit OSLanguage=1031 für Deutsch und 1033 für Englisch/US fast immer richtig liegen wirst, aber irgendwann die Exoten wie 4103 "German - Luxembourg" oder den Wert für "English - Australia" vergisst.
Wenn Du nur die Aussage "Deutsch" oder "Englisch" brauchst, solltest Du vielleicht als Alternative eine Registry-Abfrage (per Reg.exe oder WMI oder whatever) erwägen.
Beispiel:
Diese slanguage ist offensichtlich nicht so fein differenziert wie die OSLanguage - für Dich besser.
Ich würde also die OS + SP-Version über den ersten Schnipsel holen und die "DE" bzw "EN"-Angabe aus den HKCU-Einstellungen (s.o.. die ersten zwei Zeichen von slanguage).
Grüße
Biber
die beiden VBS-Schnipsel kannst naturlich zu einem zusammendampfen und damit...
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Wscript.Echo objOperatingSystem.Caption & " SP " & objOperatingSystem.ServicePackMajorVersion
Next
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
For Each objItem In colItems
WScript.Echo "Country Code: " & objItem.CountryCode
WScript.Echo "Locale: " & objItem.Locale
WScript.Echo "OS Language: " & objItem.OSLanguage
WScript.Echo "Code Set: " & objItem.CodeSet
Next
>cscript //nologo e:\schnipsel\getosdata.vbs
Microsoft Windows XP Professional SP 2
Country Code: 49
Locale: 0407
OS Language: 1031
Code Set: 1252
Aber bei der Frage nach "Deutsch" oder "Englisch" wirst Du über diesen Weg IMHO nur Näherungswerte bekommen.
Weil Du mit OSLanguage=1031 für Deutsch und 1033 für Englisch/US fast immer richtig liegen wirst, aber irgendwann die Exoten wie 4103 "German - Luxembourg" oder den Wert für "English - Australia" vergisst.
Wenn Du nur die Aussage "Deutsch" oder "Englisch" brauchst, solltest Du vielleicht als Alternative eine Registry-Abfrage (per Reg.exe oder WMI oder whatever) erwägen.
Beispiel:
>reg query "HKCU\Control Panel\International" /v slanguage|find /i "slanguage"
slanguage REG_SZ DEU
Ich würde also die OS + SP-Version über den ersten Schnipsel holen und die "DE" bzw "EN"-Angabe aus den HKCU-Einstellungen (s.o.. die ersten zwei Zeichen von slanguage).
Grüße
Biber
Wenn du diese vbs Dateien nehmen willst kanns tdu sie einfach folgendermasen zusammenbauen und abändern (ungetestet):
Das liefert dir dann die Infos in einer Zeile mit "#" als Trennzeichen.
Das ganze kannst Du dann in Batch folgendermasen abrufen:
strComputer = "."
s = ""
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
s = objOperatingSystem.Caption & "#SP " & objOperatingSystem.ServicePackMajorVersion & "#"
Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem")
For Each objItem In colItems
if objItem.OSLanguage = 9 then s = s & "ENG"
if objItem.OSLanguage = 1031 then s = s & "DE"
if objItem.OSLanguage = 1033 then s = s & "ENG"
Next
Wscript.Echo s
Das ganze kannst Du dann in Batch folgendermasen abrufen:
for /f "tokens=1,2,3 delims=#" %%a in ('cscript //nologo "%startpfad%osfind.vbs"') do set "winvers=%%a" & set "winsp=%%b" & set "winlang=%%c"