xcaschox
Goto Top

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

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

Content-Key: 210839

Url: https://administrator.de/contentid/210839

Printed on: April 27, 2024 at 03:04 o'clock

Mitglied: 76109
76109 Jul 08, 2013 updated at 08:55:50 (UTC)
Goto Top
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
Member: XcaschoX
XcaschoX Jul 08, 2013 at 09:15:18 (UTC)
Goto Top
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
Mitglied: 76109
76109 Jul 08, 2013, updated at Jul 09, 2013 at 08:21:20 (UTC)
Goto Top
Hallo Carsten!

Versuchs mal damit (*.vbs):
Option Explicit

Const sXmlPath = "..\...\Name_"  'entsprechend anpassen, wird z.B. mit '1031.xml' vervollständigt   

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

Const iHKCU = &H80000001
Const iHKLM = &H80000002

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

Dim aValues, sKey, sLanguage, sVersion
    
sLanguage = Null
    
With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")  
   .EnumKey iHKCU, sRegKey, aValues
        
    If IsArray(aValues) Then
        sVersion = "1.0"  
        For Each sKey In aValues
            If IsNumeric(sKey) And InStr(sKey, ".") > 0 Then  
                If CDbl(sKey) > CDbl(sVersion) Then sVersion = sKey
            End If
        Next
        
        If sVersion <> "1.0" Then  
            sKey = sRegKey & sVersion & 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", sVersion), sXmlPath & sLanguage & ".xml", "REG_SZ"  
        End With
    End If
End If
Wobei die Office-Version automatisch ermittelt wird...

Gruß Dieter

[edit] Code insoweit geändert, dass die höchstwertigste Version ermittelt wird [/edit]
Member: Snowman25
Snowman25 Jul 08, 2013 at 10:24:17 (UTC)
Goto Top
Hallo @XcaschoX,

mit reg query <schlüssel> /v <wert> kannst du einen einzelnen Wert in der Registry abfragen.
@Echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET key=HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Common\LanguageResources
SET keyvalue=UILanguage

:: splittet die REG QUERY auf und schreibt den Datenwert in %uilanguage%
FOR /f "tokens=3 skip=2" %%i IN ('REG QUERY %key% /v %keyvalue%') DO (SET uilanguage=%%i)  
:: Programm beendet sich, wenn der key nicht vorhanden ist. Dies kann nicht umgangen werden.

:: springt zur Marke des Werts. z.B. 0x407 für Deutsch
GOTO %uilanguage%
:: GOTO beendet die Batch, wenn die Sprungmarke nicht gefunden wird. Dies kann nicht umgangen werden.

:0x407
ECHO Deutsche Sprache in Verwendung!
REM Hier Codeblock einfügen, was dabei geschehen soll
GOTO :SUCCESS

:default
ECHO Konnte Sprachwert nicht ermittlen oder verarbeiten
GOTO :END

:SUCCESS
ECHO Erfolgreich abgearbeitet!

:END
pause>nul
Ein schnelles Beispiel. Einfach mehrere Codeblöcke nach dem Schema von :0x407 hinzufügen.

Gruß,
@Snowman25
Member: XcaschoX
XcaschoX Jul 08, 2013 at 10:51:22 (UTC)
Goto Top
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
Mitglied: 76109
76109 Jul 08, 2013 updated at 11:14:05 (UTC)
Goto Top
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
Member: XcaschoX
XcaschoX Jul 08, 2013 at 11:54:05 (UTC)
Goto Top
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
Mitglied: 76109
76109 Jul 08, 2013 at 12:05:27 (UTC)
Goto Top
Hallo Carsten!

Ist die Frage, was geht nicht?

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

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

Gruß Dieter
Member: Snowman25
Snowman25 Jul 08, 2013 at 12:24:44 (UTC)
Goto Top
Immer wieder angenehm, so komplett ignoriert zu werden face-sad
Wozu mach ich mir überhaupt die Mühe?
Member: XcaschoX
XcaschoX Jul 08, 2013 at 12:29:05 (UTC)
Goto Top
Hey Snowmann,
sorry, vielen dank, habs noch nicht getestet.
Mea Culpa.

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

LG
Carsten
Member: XcaschoX
XcaschoX Jul 08, 2013 at 12:29:34 (UTC)
Goto Top
Hallo Dieter,
der Pfad existiert.

Gruß
Carsten
Member: XcaschoX
XcaschoX Jul 08, 2013 at 14:24:42 (UTC)
Goto Top
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
Mitglied: 76109
76109 Jul 08, 2013 updated at 18:08:56 (UTC)
Goto Top
Hallo Carsten!

Füge mal in meinem Code nach Codezeile 21 diese Codezeile ein:
MsgBox "Version: " & aValues(0)  

Wird dann eine Meldung ausgegeben und wenn Ja welche?

Gruß Dieter
Member: XcaschoX
XcaschoX Jul 09, 2013 at 06:26:45 (UTC)
Goto Top
Guten Morgen,
als Message kommt Verion 11.0

Wenn ich allerdings unter 11.0 schau ist auch nichts eingetragen.

Gruß
Carsten
Mitglied: 76109
76109 Jul 09, 2013 updated at 07:50:42 (UTC)
Goto Top
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
Member: XcaschoX
XcaschoX Jul 09, 2013 at 07:48:07 (UTC)
Goto Top
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
Mitglied: 76109
76109 Jul 09, 2013 at 07:53:57 (UTC)
Goto Top
Hallo Carsten!

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

Gruß Dieter
Member: XcaschoX
XcaschoX Jul 09, 2013 at 07:57:32 (UTC)
Goto Top
Hallo Dieter,
ok. Danke nochmals für deine Mühe.

Viele Grüße
Carsten