PowerShell - Remplacer les paramètres linguistiques

Dans cette article, nous allons voir comment rajouter l’intégration de MUI et le changement de "Uilanguage" via un fichier ".xml", car l'intégration dans un fichier "Unattend.xml" possède des limites. Ceci est pour moi, la meilleure option dans les environnements multilingues. Malheureusement, dans cette article, je ne serais pas en capacité de parler de la partie format, qui est pour ma part plus complexe à appréhendé.


Voici un exemple que l'on peut trouver sur le site de Microsoft:

<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
 
<!-- user list --> 
    <gs:UserList>
        <gs:User UserID="Current" CopySettingsToDefaultUserAcct="true" CopySettingsToSystemAcct="true"/> 
    </gs:UserList>
 
    <!-- GeoID -->
    <gs:LocationPreferences> 
        <gs:GeoID Value="244"/>
    </gs:LocationPreferences>
 
    <gs:MUILanguagePreferences>
        <gs:MUILanguage Value="cy-GB"/>
        <gs:MUIFallback Value="en-GB"/>
    </gs:MUILanguagePreferences>
 
    <!-- system locale -->
    <gs:SystemLocale Name="en-US"/>
 
    <!-- input preferences -->
    <gs:InputPreferences>
        <gs:InputLanguageID Action="add" ID="0409:00000409"/>
        <gs:InputLanguageID Action="remove" ID="0409:00000409"/>
      </gs:InputPreferences>
 
    <!-- user locale -->
    <gs:UserLocale>
        <gs:Locale Name="en-US" SetAsCurrent="true" ResetAllSettings="false">
            <gs:Win32>
                <gs:iCalendarType>1</gs:iCalendarType>
         <gs:iCurrency>3</gs:iCurrency>
   <gs:iCurrDigits>1</gs:iCurrDigits>
   <gs:sList>...</gs:sList>
                <gs:sDecimal>;;</gs:sDecimal>
                <gs:sThousand>::</gs:sThousand>
                <gs:sGrouping>1</gs:sGrouping>
                <gs:iDigits>2</gs:iDigits>
                <gs:iNegNumber>2</gs:iNegNumber>
                <gs:sNegativeSign>(</gs:sNegativeSign>
                <gs:sPositiveSign>=</gs:sPositiveSign>
                <gs:sCurrency>kr</gs:sCurrency>
                <gs:sMonDecimalSep>,,</gs:sMonDecimalSep>
                <gs:sMonThousandSep>...</gs:sMonThousandSep>
                <gs:sMonGrouping>3</gs:sMonGrouping>
                 <gs:iNegCurr>3</gs:iNegCurr>
                <gs:iLZero>0</gs:iLZero>
                <gs:sTimeFormat>:HH:m:s tt:</gs:sTimeFormat>
                <gs:s1159>a.m.</gs:s1159>
                <gs:s2359>p.m.</gs:s2359>
                <gs:sShortDate>d/M/yy</gs:sShortDate>
                <gs:sLongDate>dddd, MMMM yyyy</gs:sLongDate>
                <gs:iFirstDayOfWeek>6</gs:iFirstDayOfWeek>
                <gs:iFirstWeekOfYear>2</gs:iFirstWeekOfYear>
                <gs:sNativeDigits>0246813579</gs:sNativeDigits>
                <gs:iDigitSubstitution>1</gs:iDigitSubstitution>
                <gs:iMeasure>0</gs:iMeasure>
                <gs:iTwoDigitYearMax>2021</gs:iTwoDigitYearMax>
            </gs:Win32>
        </gs:Locale>
    </gs:UserLocale>
 </gs:GlobalizationServices>


Exemple: mettre en place pour l'ensemble des utilisateurs un environnement Français

Dans cette exemple, j'ai essayer de mettre le plus d'exemple que je connais, malheureusement, il y a aussi la partie

# Create c:\temp if doesn't exist
IF (!(Test-Path "C:\temp")) {
    New-Item -ItemType Directory -Force -Path "C:\temp"
}
$xml = @()
$xml = '<gs:GlobalizationServices xmlns:gs="urn:longhornGlobalizationUnattend">
<!--User List-->
    <gs:UserList>
        <gs:User UserID="Current" CopySettingsToSystemAcct="true" CopySettingsToDefaultUserAcct="true" /> 
    </gs:UserList>

    <!--Display Language-->
 <!--https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/available-language-packs-for-windows-->
    <gs:MUILanguagePreferences> 
        <gs:MUILanguage Value="fr-FR" /> 
        <gs:MUIFallback Value="en-US" /> 
    </gs:MUILanguagePreferences> 
    <!--User Locale-->
    <!--https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/default-input-locales-for-windows-language-packs-->
    <gs:UserLocale> 
        <gs:Locale Name="fr-FR" SetAsCurrent="true" ResetAllSettings="false"/>
    </gs:UserLocale>
    <!--input preferences--> 
    <gs:InputPreferences> 
  <!--Add Keyboard Input-->
        <!--fr-FR-->
  <!--Default-->
        <gs:InputLanguageID Action="add" ID="040c:0000040c" Default="true"/> 
  <!--jp-JP-->
  <gs:InputLanguageID Action="add" ID="0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}" Default="true"/> 
  <!--Remove Keyboard Input-->
        <!--en-US--> 
        <gs:InputLanguageID Action="remove" ID="0409:00000409"/> 
    </gs:InputPreferences> 
    <!-- location -->
 <!-- https://docs.microsoft.com/en-us/windows/win32/intl/table-of-geographical-locations -->
 <!-- GeoID -->
    <gs:LocationPreferences> 
        <gs:GeoID Value="84"/> 
    </gs:LocationPreferences>
</gs:GlobalizationServices>
'
$xml | Out-File "C:\temp\MUI.xml"

#Apply MUI settings
$ErrorActionPreference = 'SilentlyContinue'
C:\Windows\System32\control.exe "intl.cpl,,/f:""c:\temp\MUI.xml""" | Out-Null

Exemple: mettre en place pour l'ensemble des utilisateurs l'ensemble des claviers Japonais

Ceci est un très bon exemple, il peut nous arriver quand lors de la préparation d'un poste on se retrouve coincé avec une saisie des caractères manquants. Les claviers IME (input method editor) peuvent vite devenir une difficulté quand on s'est trompé, dès le départ. Dans les pays qui utilisent un alphabet syllabique, il faut absolument que le moteur IME se lance, cependant il est nécessaire aussi à ces personnes de pouvoir utiliser un alphabet pour saisir des adresses, pour les Japonais c'est "0411:00000411" (JAPANESE) pour le clavier uniquement qwerty et "0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}" (JAPANESE input method editor).
Donc avec ce script PowerShell, nous allons générer un fichier XML avec les claviers japonais et forcer l'intégration dans le module linguistique du panneau de configuration. Après que la manipulation soit faite, il faudra s'assurer que :
  • les packages MUI soient bien intégrés.
  • L'ordinateur doit avoir redémarrage. 

# Create c:\temp if doesn't exist
IF (!(Test-Path "C:\temp")) {
    New-Item -ItemType Directory -Force -Path "C:\temp"
}
$xml = @()
$xml = '<gs:globalizationservices xmlns:gs="urn:longhornGlobalizationUnattend"> 
<gs:userlist>
    <gs:user copysettingstodefaultuseracct="true" copysettingstosystemacct="true" userid="Current">
</gs:user></gs:userlist>
    <gs:inputpreferences> 
        <gs:inputlanguageid action="add" default="true" id="0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}">
        <gs:inputlanguageid action="add" id="0411:{4518B9B5-7112-4855-B64F-2EC0DD2831E6}{54EDCC94-1524-4BB1-9FB7-7BABE4F4CA64}">
        <gs:inputlanguageid action="add" id="0411:{DB9300A3-B9FD-4BB4-830D-53CFD9BEC5B6}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}">
    </gs:inputlanguageid></gs:inputlanguageid></gs:inputlanguageid></gs:inputpreferences>
</gs:globalizationservices>
'
$xml | Out-File "C:\temp\MUI.xml"

#Apply MUI settings
$ErrorActionPreference = 'SilentlyContinue'
C:\Windows\System32\control.exe "intl.cpl,,/f:""c:\temp\MUI.xml""" | Out-Null

La liste des claviers avec des composants ime

Chinese Simplified PinyinIme50

"0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{F3BA9077-6C7E-11D4-97FA-0080C882687E}"

Chinese Simplified ABC

"0804:{81D4E9C9-1D3B-41BC-9E6C-4B40BF79E35E}{C4D24306-1633-41AE-921E-C2E5B9D46E6B}"

Chinese Simplified QuanPin

"0804:{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{54FC610E-6ABD-4685-9DDD-A130BDF1B170}"

Chinese Simplified ZhengMa

"0804:{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{733B4D81-3BC3-4132-B91A-E9CDD5E2BFC9}"

Chinese Simplified ShuangPin

"0804:{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{EF63706D-31C4-490E-9DBB-BD150ADC454B}

Chinese Traditional NewPhonetic

"0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{B2F9C502-1742-11D4-9790-0080C882687E}"

Chinese Traditional NewChangJie

"0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{F3BA907A-6C7E-11D4-97FA-0080C882687E}"

Chinese Traditional NewQuickChangJie

"0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{0B883BA0-C1C7-11D4-87F9-0080C882687E}"

Chinese Traditional Phonetic

"0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{761309DE-317A-11D4-9B5D-0080C882687E}"

Chinese Traditional ChangJie

"0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{4BDF9F03-C7D3-11D4-B2AB-0080C882687E}"

Chinese Traditional QuickChangJie

"0404:{531FDEBF-9B4C-4A43-A2AA-960E8FCDC732}{6024B45F-5C54-11D4-B921-0080C882687E}

Chinese Traditional DaYi

"0404:{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{037B2C25-480C-4D7F-B027-D6CA6B69788A}"

Chinese Traditional Array

"0404:{E429B25A-E5D3-4D1F-9BE3-0C608477E3A1}{D38EFF65-AA46-4FD5-91A7-67845FB02F5B}"

Korean

"0412:{A028AE76-01B1-46C2-99C4-ACD9858AE02F}{B5FE1F02-D5F2-4445-9C03-C568F23C99A1}"

Japanese

"0411:{03B5835F-F03C-411B-9CE2-AA23E1171E36}{A76C93D9-5523-4E90-AAFA-4DB112F9AC76}"

Commentaires

Posts les plus consultés de ce blog

MRemoteNG - Voir les mots de passe dans l'application

Powershell - Utiliser les requêtes WMI

PowerShell - Utiliser NSIS (Nullsoft Scriptable Install System) pour simplifier l'usage des scripts PS1