Regional Settings – WAP VM Role Gallery Item

English version: Regional Settings – WAP VM Role Gallery Item.pdf

Die Regional Settings sind schon mit den Standard VM Templates im VMM ein heißes Thema. Allerdings kann man mittels einer XML Datei oder mit entsprechenden PowerShell Cmdlets Abhilfe schaffen. Das hat zwar zur Folge, dass man mehrere VM Templates mit unterschiedlichen Regional Settings vorhalten muss, aber das Ziel ist erreicht. Zudem hat Microsoft hierzu einen KB-Artikel veröffentlicht.

-> http://support.microsoft.com/kb/2709539/en-us

Mit den VM Role Gallery Items steht man wieder vor dem Problem der Regional Settings. Denn auch hier wird der VMM zum Deployment verwendet und dadurch standardmäßig die Regional Settings auf en-us gesetzt. Die Lösung ist hier nicht ganz so trivial wie bei den VM Templates und lautet Provisioning Script. Hier allerdings mit einem großen Aber! Denn man kann sich nicht auf die International Settings Cmdlets verlassen, da diese erst ab Windows 8.1 und Windows Server 2012 R2 zur Verfügung stehen sowie größtenteils nur für den aktuellen Benutzer gelten.

-> http://technet.microsoft.com/en-us/library/dn375327.aspx

Einzig und allein Set-WinSystemLocale kann man gebrauchen. Für den Rest muss ein anderer Weg herhalten. Dieser geht zwar wie bei den VM Templates über eine XML Datei, aber die XML Datei ist anders aufgebaut, so dass man Sie über die Control Panel Tools anwenden kann. Eine Anleitung dazu findet ihr hier.

-> http://msdn.microsoft.com/en-us/goglobal/bb964650

Dazu werden dann noch weitere Details für die jeweilige Sprache benötigt.

-> http://technet.microsoft.com/en-us/library/cc766191(v=ws.10).aspx
-> http://technet.microsoft.com/en-us/library/cc766503(v=ws.10).aspx
-> http://msdn.microsoft.com/en-us/library/windows/desktop/dd374073(v=vs.85).aspx

Integration VM Role Gallery Item:

In meinem Beispiel möchte ich in dem VM Role Gallery Item eines Windows Server 2012 R2 Datacenter die Regional Settings en-us und de-DE anbieten. Dazu benötige ich insgesamt vier Dateien. Zwei XML Dateien mit den Regional Settings, eine CMD Datei, die mein PowerShell Script aufruft, und das PowerShell Script selber. Beginnen wir mit der CMD Datei.

powershell -noprofile Set-ExecutionPolicy Unrestricted
powershell .SystemLocale.ps1 -SystemLocale %1

Diese enthält nur zwei Zeilen. Die erste Zeile setzt die Execution Policy entsprechend, so dass das PowerShell Script aufgerufen werden kann. Die zweite Zeile ruft das PowerShell Script mit dem entsprechenden Parameter, den man im VM Role Deployment Wizard angegeben hat, auf. Danach folgt das PowerShell Script.

Param([string]$SystemLocale)
if($SystemLocale -eq ‘en-us’)
{
Set-WinSystemLocale $SystemLocale
$Item=Get-Item en-us.xml
$Path=($Item.PSPath -split(‘::’))[1]
$Command=”control.exe intl.cpl,,/f:””$Path”””
cmd.exe /c $Command
}
if($SystemLocale -eq ‘de-DE’)
{
Set-WinSystemLocale $SystemLocale
$Item=Get-Item de-de.xml
$Path=($Item.PSPath -split(‘::’))[1]
$Command=”control.exe intl.cpl,,/f:””$Path”””
cmd.exe /c $Command
}

Dort filtere ich auf den Parameter und setze anschließend die System Locale. Danach muss man sich den Pfad zur entsprechenden XML Datei ausgeben lassen und fügt in einer Variablen den Befehl für die Command-line zusammen. Anschließend führt man den Befehl aus und die entsprechenden Regional Settings werden gesetzt.

Die beiden XML Dateien sind nach dem oben angegebenen MSDN Artikel aufgebaut und können nach Belieben, um weitere Einstellungen erweitert werden.

en-us.xml:

<gs:GlobalizationServices xmlns:gs=”urn:longhornGlobalizationUnattend”>
<!–User List–>
<gs:UserList>
<gs:User UserID=”Current” CopySettingsToDefaultUserAcct=”true” CopySettingsToSystemAcct=”true”/>
</gs:UserList>
<gs:UserLocale>
<gs:Locale Name=”en-us” SetAsCurrent=”true”/>
</gs:UserLocale>
<!–location–>
<gs:LocationPreferences>
<gs:GeoID Value=”244″/>
</gs:LocationPreferences>
<!–Display Language–>
<gs:MUILanguagePreferences>
<gs:MUILanguage Value=”en-us” />
<gs:MUIFallback Value=”en-us” />
</gs:MUILanguagePreferences>
<gs:InputPreferences>
<!–en-us–>
<gs:InputLanguageID Action=”add” ID=”0409:00000409″ Default=”true”/>
</gs:InputPreferences>
</gs:GlobalizationServices>

de-DE.xml:

<gs:GlobalizationServices xmlns:gs=”urn:longhornGlobalizationUnattend”>
<!–User List–>
<gs:UserList>
<gs:User UserID=”Current” CopySettingsToDefaultUserAcct=”true” CopySettingsToSystemAcct=”true”/>
</gs:UserList>
<gs:UserLocale>
<gs:Locale Name=”de-DE” SetAsCurrent=”true”/>
</gs:UserLocale>
<!–location–>
<gs:LocationPreferences>
<gs:GeoID Value=”94″/>
</gs:LocationPreferences>
<!–Display Language–>
<gs:MUILanguagePreferences>
<gs:MUILanguage Value=”en-us” />
<gs:MUIFallback Value=”en-us” />
</gs:MUILanguagePreferences>
<gs:InputPreferences>
<!–de-DE–>
<gs:InputLanguageID Action=”add” ID=”0407:00000407″ Default=”true”/>
</gs:InputPreferences>
</gs:GlobalizationServices>

Damit wäre dann die Vorarbeit geschafft und alle Dateien werden in ein Verzeichnis Namens SystemLocale kopiert. Mittels dem VM Role Authoring Tool fügt man unter der Resource Extension ein Provisioning Script hinzu und lädt den SystemLocale Ordner hinein.

VMRoledeDE5

Das Provisioning Script sollte als Post Install Script ausgeführt werden. Ein Reboot nach dem Setzen der Einstellungen ist ebenfalls erforderlich, so dass die Regional Settings übernommen werden. Daher bei Always Reboot true angeben.

Für die Auswahl zwischen en-us und de-DE muss man im Abschnitt ViewDefinition der Resource Definition unter Category den Parameter einfügen und als Type Option auswählen.

VMRoledeDE4

Somit erhält man im VM Role Deployment Wizard die entsprechende Auswahl und kann absofort die VM mit unterschiedlichen Regional Settings ausrollen.

VMRoledeDE2VMRoledeDE3

Ein großartiger Vorteil gegenüber den Standard VM Templates besteht darin, dass man nicht mehrere Templates für unterschiedliche Regional Settings benötigt, sondern nur noch ein Template beziehungsweise ein VM Role Gallery Item. Denn für jedes Regional Setting wird einfach eine weitere XML Datei sowie ein Eintrag im Parameter erzeugt.

In diesem Sinne viel Spaß beim Deployment!

Facebooktwittergoogle_pluslinkedinmail

Leave a Reply