By web master on Monday, 27 August 2012
Category: DSM

Konfiguration der Regional Settings für Window 7 via DSM

Mein Kollege Michael Jeske und ich haben uns in einem gemeinsamen Projekt intensive Gedanken darum gemacht, wie ein Windows 7 Client optimal über die DSM Datenbank in internationalen agierenden Unternehmen auf seine regionalen Bedürfnisse hin präpariert wird. Folgende Ziele haben wir uns dabei gesteckt: 

Um diese Ziele umzusetzen, muss analysiert werden, welche Settings für einen Computer konfiguriert werden müssen. Dies sind im Einzelnen: 

Zeitzone Bestimmt die Uhrzeit und die "Daylight saving" Konfiguration der jeweiligen Region

http://technet.microsoft.com/en-us/library/cc749073(v=ws.10).aspx
Für eine vollständige Liste kann ab Windows Vista auch der Registry Key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones eingesehen werden.

Locale IDs Die Local IDs sind eine eigene Usmetzung von Microsoft und werden von einigen Office Komponenten und VBA verwendet.  http://support.microsoft.com/kb/221435/en-us & http://www.science.co.il/language/locale-codes.asp
Language Codes Werden (wie die Local IDs) zur eindeitugen Identifizierung einer Sprache verwendet.  Eine gute Übersichtstabelle (für die Langauge Codes und die LCIDs) bietet die Israel Science and Technologiy Homepage http://www.science.co.il/language/locale-codes.asp#definitions.
Graphical Location Der aktuelle Aufenthaltsort (Land) als GeoID codiert http://msdn.microsoft.com/en-us/library/windows/desktop/dd374073(v=vs.85).aspx

Um diese Werte Lokations-bezogen setzen zu können, empfiehlt es sich, eine beliebige Struktur in DSM (z.B. auf Basis von OUs oder sich gegenseitig ausschließenden dynamischen Gruppen) aufzubauen. Wichtig ist, dass ein Computer nur Mitglied eines einzelnen Regions-bezogenen Containers ist. Eine solche Struktur kann im einfachsten Fall wie folgt auf Basis von Organisationseinheiten / Domains aufgebaut sein: 

Org      
  Managed Users & Computers    
    Munich  
    Berlin  
    Venice  
    New York  
    San Francisco  
    ...  

Alle nun zuvor als wichtig identifizierten Werte können nun in Form von ODS Variablen angelegt und pro OU konfiguriert werden. Da die LCID des öfteren, sowohl in HEX als auch Dezimalformat vorliegen muss, empfiehlt es sich, 2 Parameter anzulegen (oder es wird zusätzlicher Aufwand betrieben, in diversen eScripts eine Umrechnung vorzunehmen).

Alle weiteren Werte (wie der Country Code, die Currency, etc.) leiten sich beim Setzen automatisch ab (d.h. Windows kümmert sich) und werden daher nicht explizit berücksichtigt. Ist dies gewollt, kann eine detaillierte Konfiguration unter "HKU\.DEFAULT\Control Panel\International" (und entsprechenden weiteren ODS Variablen) vorgenommen werden.

Daraus ergibt sich folgende Ansicht auf Basis einer OU (hier am Beispiel "Munich"):

Da die Sprachen unabhängig von den regionalen Einstellungen und der Lokation des Computers installiert werden müssen (ein deutscher Benutzer arbeitet z.B. für längere Zeit am Standort New York und möchte auf der dort angeschlossenen US Tastatur mit deutscher UI arbeiten), werden die unterstützten MUI Pakete einzeln paketiert und (z.B. via Schemaerweiterungen, sowie serverseitigen Installationsvoraussetzungen an den MUI Paketen) zur Verfügung gestellt. 

Im Anschluss wird ein eScript und eine Policy pro regionalen Container erstellt. Wichtig ist, dass eine Policy pro Container erstellt wird, und nicht mit Target List Erweiterungen gearbeitet wird. Dies sorgt dafür, dass das eScript beim Verschieben eines Computers von einem Container in den anderen erneut ausgeführt wird. 

Im folgenden Beispiel wurde das deutsche MUI Paket immer installiert und 3 weitere Sprachen sind pro Computer in Form von 3 Optionlist-Schemaerweiterungen verfügbar. Die verfügbaren Sprachen wurden dabei als Werte von 01-15 jeweils in den 3 Optionlisten vorgegeben.

!Get the addidional Languages for this Client to set the available Keyboardlayouts at LoginScreen
Set('_TargetLanguage1','%CurrentComputer.CustomBroseGenSrvProps.TargetLanguage1%')
Set('_TargetLanguage2','%CurrentComputer.CustomBroseGenSrvProps.TargetLanguage2%')
Set('_TargetLanguage3','%CurrentComputer.CustomBroseGenSrvProps.TargetLanguage3%')
!
!### Get the ODS Variables that defines the regional settings
Set('_NationDef','%CurrentComputer.Var.RegionalSettings.Nation%')
Set('_TimeZone','%CurrentComputer.Var.RegionalSettings.TimeZone%')
Set('_LCIDDef','%CurrentComputer.Var.RegionalSettings.LCID_Hex%')
Set('_LPIDDef','%CurrentComputer.Var.RegionalSettings.LPID%')
!
!###Get Variable for first additional TargetLanguage
If %_TargetLanguage1%='01'
Set('_LPID1','en-en')
Set('_LCID1','0409')
If %_TargetLanguage1%='02'
Set('_LPID1','fr-fr')
Set('_LCID1','040c')
If %_TargetLanguage1%='03'
Set('_LPID1','cs-cz')
Set('_LCID1','0405')
If %_TargetLanguage1%='04'
Set('_LPID1','zh-cn')
Set('_LCID1','0804')
If %_TargetLanguage1%='05'
Set('_LPID1','pt-br')
Set('_LCID1','0416')
If %_TargetLanguage1%='06'
Set('_LPID1','ja-jp')
Set('_LCID1','0411')
If %_TargetLanguage1%='07'
Set('_LPID1','ko-kr')
Set('_LCID1','0412')
If %_TargetLanguage1%='08'
Set('_LPID1','hu-hu')
Set('_LCID1','040e')
If %_TargetLanguage1%='09'
Set('_LPID1','pt-pt')
Set('_LCID1','0816')
If %_TargetLanguage1%='10'
Set('_LPID1','ru-ru')
Set('_LCID1','0419')
If %_TargetLanguage1%='11'
Set('_LPID1','sk-sk')
Set('_LCID1','041b')
If %_TargetLanguage1%='12'
Set('_LPID1','es-es')
Set('_LCID1','040a')
If %_TargetLanguage1%='13'
Set('_LPID1','sv-se')
Set('_LCID1','041d')
If %_TargetLanguage1%='14'
Set('_LPID1','it-it')
Set('_LCID1','0410')
If %_TargetLanguage1%='15'
Set('_LPID1','ro-ro')
Set('_LCID1','0418')
!

!###Get Variable for second additional TargetLanguage

If %_TargetLanguage2%='01'

Set('_LPID2','en-en')
Set('_LCID2','0409')
If %_TargetLanguage2%='02'
Set('_LPID2','fr-fr')
Set('_LCID2','040c')
If %_TargetLanguage2%='03'
Set('_LPID2','cs-cz')
Set('_LCID2','0405')
If %_TargetLanguage2%='04'
Set('_LPID2','zh-cn')
Set('_LCID2','0804')
If %_TargetLanguage2%='05'
Set('_LPID2','pt-br')
Set('_LCID2','0416')
If %_TargetLanguage2%='06'
Set('_LPID2','ja-jp')
Set('_LCID2','0411')
If %_TargetLanguage2%='07'
Set('_LPID2','ko-kr')
Set('_LCID2','0412')
If %_TargetLanguage2%='08'
Set('_LPID2','hu-hu')
Set('_LCID2','040e')
If %_TargetLanguage2%='09'
Set('_LPID2','pt-pt')
Set('_LCID2','0816')
If %_TargetLanguage2%='10'
Set('_LPID2','ru-ru')
Set('_LCID2','0419')
If %_TargetLanguage2%='11'
Set('_LPID2','sk-sk')
Set('_LCID2','041b')
If %_TargetLanguage2%='12'
Set('_LPID2','es-es')
Set('_LCID2','040a')
If %_TargetLanguage2%='13'
Set('_LPID2','sv-se')
Set('_LCID2','041d')
If %_TargetLanguage2%='14'
Set('_LPID2','it-it')
Set('_LCID2','0410')
If %_TargetLanguage2%='15'
Set('_LPID2','ro-ro')
Set('_LCID2','0418')
!

!###Get Variable for third additional TargetLanguage
If %_TargetLanguage3%='01'
Set('_LPID3','en-en')
Set('_LCID3','0409')
If %_TargetLanguage3%='02'
Set('_LPID3','fr-fr')
Set('_LCID3','040c')
If %_TargetLanguage3%='03'
Set('_LPID3','cs-cz')
Set('_LCID3','0405')
If %_TargetLanguage3%='04'
Set('_LPID3','zh-cn')
Set('_LCID3','0804')
If %_TargetLanguage3%='05'
Set('_LPID3','pt-br')
Set('_LCID3','0416')
If %_TargetLanguage3%='06'
Set('_LPID3','ja-jp')
Set('_LCID3','0411')
If %_TargetLanguage3%='07'
Set('_LPID3','ko-kr')
Set('_LCID3','0412')
If %_TargetLanguage3%='08'
Set('_LPID3','hu-hu')
Set('_LCID3','040e')
If %_TargetLanguage3%='09'
Set('_LPID3','pt-pt')
Set('_LCID3','0816')
If %_TargetLanguage3%='10'
Set('_LPID3','ru-ru')
Set('_LCID3','0419')
If %_TargetLanguage3%='11'
Set('_LPID3','sk-sk')
Set('_LCID3','041b')
If %_TargetLanguage3%='12'
Set('_LPID3','es-es')
Set('_LCID3','040a')
If %_TargetLanguage3%='13'
Set('_LPID3','sv-se')
Set('_LCID3','041d')
If %_TargetLanguage3%='14'
Set('_LPID3','it-it')
Set('_LCID3','0410')
If %_TargetLanguage3%='15'
Set('_LPID3','ro-ro')
Set('_LCID3','0418')
!
!
!### Create an answer file in XML format to configure the language settings in the default user profile
If Exist('%Temp%\regional.xml')
Delete('%Temp%\regional.xml')
ModifyOemEx('%Temp%\regional.xml','','','',moInsertAtTop+moOverwriteExisting)

























EndProc/TS

!### Execute the language configuration

ExecuteEx('control intl.cpl,, /f:"%Temp%\regional.xml"','','')/?/TS

!###Preload Default KeyboardLayout to WelcomeScreen
RegModify('HKEY_USERS\.DEFAULT\Keyboard Layout\Preload','1','0000%_LCIDDef%',mrReplace)/TS
RegModify('HKEY_USERS\.DEFAULT\Keyboard Layout\Preload','2','00000409',mrReplace)/TS
RegModify('HKEY_USERS\.DEFAULT\Keyboard Layout\Preload','3','00000407',mrReplace)/TS
RegModify('HKEY_USERS\.DEFAULT\Keyboard Layout\Preload','4','0000%_LCID1%',mrReplace)/TS
RegModify('HKEY_USERS\.DEFAULT\Keyboard Layout\Preload','5','0000%_LCID2%',mrReplace)/TS
RegModify('HKEY_USERS\.DEFAULT\Keyboard Layout\Preload','6','0000%_LCID3%',mrReplace)/TS
!
!###Configure TimeZone get from Location Setting
!
Execute('tzutil.exe /s "%_TimeZone%"')/TS

!

Related Posts

Leave Comments