Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Script - Batch ausführen nach Abfrage eines Reg-Wertes

Frage Microsoft Microsoft Office

Mitglied: caschopl

caschopl (Level 1) - Jetzt verbinden

08.07.2013, aktualisiert 10:40 Uhr, 2242 Aufrufe, 18 Kommentare

Hallo ich habe folgendes Problem,

ich muss in die Registry unter dem HKLU einen bestimmten Wert (Pfad zu einer xml) eintragen, allerdings hängt der Eintrag davon ab welche Officesprache installiert ist.

Beispiel:
wenn in der Registry unter:

"HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\LanguageResources"
UILanguage 00000407 (ist der wert für eine deutsche Office installation steht, dann soll unter

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\Spotlight\Providers\Contoso
ServiceURL dein Pfad zu einer xml datei geschrieben werden,

und das gleiche dann, wenn unter dem Wert UILanguage der Wert für das englische Office steht, dann soll der entsprechende XML Pafd geschrieben werden.

Kann mir hier jemand bitte helfen, bin leider nicht so der script/batch Experte.

Vielen Dank.

Gruß
Carsten

Mitglied: 76109
08.07.2013, aktualisiert um 10:55 Uhr
Hallo caschopl!

Wobei der Hexwert '00000407' der dezimalen Sprachkennzahl '1031' entspricht...

Außerdem enthält bei mir 'UILanguage' den Wert 0 und 'InstallLanguage' den Wert '1031'

Gruß Dieter
Bitte warten ..
Mitglied: caschopl
08.07.2013 um 11:15 Uhr
Hallo Dieter, das stimmt, aber ich habe eine MUI installiert und dann ist der Wert der UILanguage, der Wert der zur Zeit eingestellten Sprache.

Hast du net Idee wie man das lösen kann?

Gruß
Carsten
Bitte warten ..
Mitglied: 76109
08.07.2013, aktualisiert 09.07.2013
Hallo Carsten!

Versuchs mal damit (*.vbs):
01.
Option Explicit 
02.
 
03.
Const sXmlPath = "..\...\Name_"  'entsprechend anpassen, wird z.B. mit '1031.xml' vervollständigt  
04.
 
05.
Const sRegNewKey = "HKCU\Software\Microsoft\Office\%1\Common\Spotlight\Providers\Contoso\ServiceURL" 
06.
 
07.
Const iHKCU = &H80000001 
08.
Const iHKLM = &H80000002 
09.
 
10.
Const sRegKey = "Software\Microsoft\Office\" 
11.
Const sRegSubKey = "\Common\LanguageResources" 
12.
Const sRegValue = "UILanguage" 
13.
 
14.
Dim aValues, sKey, sLanguage, sVersion 
15.
     
16.
sLanguage = Null 
17.
     
18.
With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") 
19.
   .EnumKey iHKCU, sRegKey, aValues 
20.
         
21.
    If IsArray(aValues) Then 
22.
        sVersion = "1.0" 
23.
        For Each sKey In aValues 
24.
            If IsNumeric(sKey) And InStr(sKey, ".") > 0 Then 
25.
                If CDbl(sKey) > CDbl(sVersion) Then sVersion = sKey 
26.
            End If 
27.
        Next 
28.
         
29.
        If sVersion <> "1.0" Then 
30.
            sKey = sRegKey & sVersion & sRegSubKey 
31.
           .GetDWordValue iHKCU, sKey, sRegValue, sLanguage 
32.
        End If 
33.
    End If 
34.
End With 
35.
 
36.
If IsNull(sLanguage) = False Then 
37.
    If sLanguage > "0" Then 
38.
        With CreateObject("WScript.Shell") 
39.
            .RegWrite Replace(sRegNewKey, "%1", sVersion), sXmlPath & sLanguage & ".xml", "REG_SZ" 
40.
        End With 
41.
    End If 
42.
End If
Wobei die Office-Version automatisch ermittelt wird...

Gruß Dieter

[edit] Code insoweit geändert, dass die höchstwertigste Version ermittelt wird [/edit]
Bitte warten ..
Mitglied: Snowman25
08.07.2013 um 12:24 Uhr
Hallo caschopl,

mit reg query <schlüssel> /v <wert> kannst du einen einzelnen Wert in der Registry abfragen.
01.
@Echo off 
02.
SETLOCAL ENABLEDELAYEDEXPANSION 
03.
SET key=HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\LanguageResources 
04.
SET keyvalue=UILanguage 
05.
 
06.
:: splittet die REG QUERY auf und schreibt den Datenwert in %uilanguage% 
07.
FOR /f "tokens=3 skip=2" %%i IN ('REG QUERY %key% /v %keyvalue%') DO (SET uilanguage=%%i) 
08.
:: Programm beendet sich, wenn der key nicht vorhanden ist. Dies kann nicht umgangen werden. 
09.
 
10.
:: springt zur Marke des Werts. z.B. 0x407 für Deutsch 
11.
GOTO %uilanguage% 
12.
:: GOTO beendet die Batch, wenn die Sprungmarke nicht gefunden wird. Dies kann nicht umgangen werden. 
13.
 
14.
:0x407 
15.
ECHO Deutsche Sprache in Verwendung! 
16.
REM Hier Codeblock einfügen, was dabei geschehen soll 
17.
GOTO :SUCCESS 
18.
 
19.
:default 
20.
ECHO Konnte Sprachwert nicht ermittlen oder verarbeiten 
21.
GOTO :END 
22.
 
23.
:SUCCESS 
24.
ECHO Erfolgreich abgearbeitet! 
25.
 
26.
:END 
27.
pause>nul
Ein schnelles Beispiel. Einfach mehrere Codeblöcke nach dem Schema von :0x407 hinzufügen.

Gruß,
Snowman25
Bitte warten ..
Mitglied: caschopl
08.07.2013 um 12:51 Uhr
Hallo Dieter,
erstmal danke für deine Mühe.

Denke das script funktioniert bestimmt, allerdings stelle ich mir gerade die Frage, wo ich genau bestimme welch der 6 xml dateien in den wer der ServiceURL eingetragen wird.

die xml dateien liegen auf den Server alle im selben verzeichnis, heißen jedoch z.B. template_de.xml oder template_en.xml usw.

wie gesagt, es soll geprüft werden, welche Sprache gerade eingestellt ist und dann soll die entsprechende XML datei eingetragen wir.

Wenn ich den script richtig lese gehst du davon aus, dass die xml immer gleich heisst, oder? Sorry, aber bin im scripten ganz,ganz schlecht.

Gruß
Carsten
Bitte warten ..
Mitglied: 76109
08.07.2013, aktualisiert um 13:14 Uhr
Hallo Carsten!

Den Xml-Dateien solltest Du natürlich Namen geben, die die Sprachkennung enthalten z.B. 'Template_1031.xml'.
In dem Fall müsste dann die Konstante 'XmlPath' den Pfad inklusive 'Template_' enthalten der Rest '1031.xml' wird vom Code angehängt..

Die Sprachkennzahlen findes Du hier

Gruß Dieter
Bitte warten ..
Mitglied: caschopl
08.07.2013 um 13:54 Uhr
Hallo Dieter,

so sieht die Datei bei mir jetzt aus. aber es geht irgendwie nich......

Option Explicit

Const sXmlPath = "J:\Data\Templates\Comtoso\template_" 'Anpassen

Const sRegNewKey = "HKCU\Software\Microsoft\Office\%1\Common\Spotlight\Providers\Comtoso\ServiceURL"

Const iHKCU = &H80000001
Const iHKLM = &H80000002

Const sRegKey = "Software\Microsoft\Office\"
Const sRegSubKey = "\Common\LanguageResources"
Const sRegValue = "UILanguage"

Dim aValues, sKey, sLanguage

sLanguage = Null

With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
.EnumKey iHKCU, sRegKey, aValues

If IsArray(aValues) Then
If IsNumeric(aValues(0)) Then
sKey = sRegKey & aValues(0) & sRegSubKey
.GetDWordValue iHKCU, sKey, sRegValue, sLanguage
End If
End If
End With

If IsNull(sLanguage) = False Then
If sLanguage > "0" Then
With CreateObject("WScript.Shell")
.RegWrite Replace(sRegNewKey, "%1", aValues(0)), sXmlPath & sLanguage & ".xml", "REG_SZ"
End With
End If
End If

Frage muss in der Zeile 10 - 12 nicht noch irgendwo die Versionsnummer angegeben werden?

Danke Gruß
Carsten
Bitte warten ..
Mitglied: 76109
08.07.2013 um 14:05 Uhr
Hallo Carsten!

Ist die Frage, was geht nicht?

Außer dem Pfad brauchst Du nix anzupassen. Der Code soll ja die Version automatisch ermitteln

Existiert in der Registry der Pfad 'HKEY_CURRENT_USER\Software\Microsoft\Office\14.0' ?

Gruß Dieter
Bitte warten ..
Mitglied: Snowman25
08.07.2013 um 14:24 Uhr
Immer wieder angenehm, so komplett ignoriert zu werden
Wozu mach ich mir überhaupt die Mühe?
Bitte warten ..
Mitglied: caschopl
08.07.2013 um 14:29 Uhr
Hey Snowmann,
sorry, vielen dank, habs noch nicht getestet.
Mea Culpa.

Werds gleich testen. Danke schonmal für die Mühe.

LG
Carsten
Bitte warten ..
Mitglied: caschopl
08.07.2013 um 14:29 Uhr
Hallo Dieter,
der Pfad existiert.

Gruß
Carsten
Bitte warten ..
Mitglied: caschopl
08.07.2013 um 16:24 Uhr
Hallo Snowman,
danke für die Batch. Fuktioniert sweit ganz gut.
Denke aber, dass ich mit der VBS von Dieter flexibler bin.

Vielen Dank für deine Mühe.

Gruß
Carsten
Bitte warten ..
Mitglied: 76109
08.07.2013, aktualisiert um 20:08 Uhr
Hallo Carsten!

Füge mal in meinem Code nach Codezeile 21 diese Codezeile ein:
01.
MsgBox "Version: " & aValues(0)
Wird dann eine Meldung ausgegeben und wenn Ja welche?

Gruß Dieter
Bitte warten ..
Mitglied: caschopl
09.07.2013 um 08:26 Uhr
Guten Morgen,
als Message kommt Verion 11.0

Wenn ich allerdings unter 11.0 schau ist auch nichts eingetragen.

Gruß
Carsten
Bitte warten ..
Mitglied: 76109
09.07.2013, aktualisiert um 09:50 Uhr
Hallo Carsten!

D.h. es gibt im Office-Pfad mehrere Versionen 11.0, ..., 14.0 und Du möchtest die höchstwertigste Version verwenden?

Gruß Dieter
Bitte warten ..
Mitglied: caschopl
09.07.2013 um 09:48 Uhr
Hallo Dieter,
ja in der Registry sind mehrere Einträge.
es gibt auch 15.0 aber nur weil Lync 2013 installiert ist. die aktuelle Office Installation ist 14.0
irgendwann wird es wahrscheinlich 15.0.

Gruß
Carsten
Bitte warten ..
Mitglied: 76109
09.07.2013 um 09:53 Uhr
Hallo Carsten!

In dem Fall musst Du die Version vorgeben und könntest dann auch Snowmans Script verwenden...

Gruß Dieter
Bitte warten ..
Mitglied: caschopl
09.07.2013 um 09:57 Uhr
Hallo Dieter,
ok. Danke nochmals für deine Mühe.

Viele Grüße
Carsten
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows Server
Batch Script bei Start ausführen (3)

Frage von KEFHVDI zum Thema Windows Server ...

Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Windows Server
gelöst SCCM2012 Abfrage eines Registry Wertes (5)

Frage von busteron zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...