tech.guitarrapc.cóm

Technical updates

AWS や Azure の英語UI をPowerShellで日本語UIにする

既出のこれ、実は大変助かりました。

SE の雑記 - Azure VM の日本語 UI を PowerShell で設定

Language PackのダウンロードURL がわからなくてめんどくさくて投げていたのですが、せんせーがURLを出していてくださっています。

ということで、ちょっと自分が使いやすいようにしてみましょう。

目次

何を設定したいのか

何をするにもまず、何をしたいのかを把握しましょう。

今回の場合は、英語環境から 完全な日本語環境への移行です。

よって、GUI でできるなら PowerShell でやるために まず見るべきはこれです。

International Settings Cmdlets in Windows PowerShell

今回行っていること

多くはそのままですが、キーボードやをちょっとつけたしたり、処理の場所を変更しています。

# 概要 設定方法
1 OS選択 Windows2012と2012R2を選択可能に
2 パスワードプロンプト パスワード埋め込みは極力さけたいので
3 OSに応じたLanguagePackの取得 Start-BitsTransfer
4 LanguagePackのインストール Add-WindowsPackage
5 日本語キーボード レジストリ
6 再起動 Restart-Computer
7 言語設定のための自動ログイン RunOnceレジストリ
8 日本語UIの明示 Set-WinUILanguageOverride
9 地域を日本に設定 Set-WinHomeLocation
10 言語リストで日本語を優先に Set-WinUserLanguageList
11 Non-Unicodeプログラムで日本語利用に Set-WinSystemLocal
12 再起動 RunOnceレジストリ

コード

GitHubにおいておきます

PowerShellUtil / Install-JapaneseUI /

function Install-JapaneseUI
{
    param
    (
        [parameter(
            mandatory = 1,
            position = 0)]
        [ValidateSet("Windows2012","Windows2012R2")]
        [string]
        $targetOSVersion,

        [parameter(
            mandatory = 0,
            position = 1)]
        [ValidateNotNullOrEmpty()]
        [string]
        $winTemp = "C:\Windows\Temp",

        [parameter(
            mandatory = 0,
            position = 2)]
        [ValidateNotNullOrEmpty()]
        [string]
        $outputRunOncePs1 = "C:\Windows\Temp\SetupLang.ps1",

        [parameter(
            mandatory = 1,
            position = 3)]
        [System.Management.Automation.PSCredential]
        $credential,

        [parameter(
            mandatory = 0,
            position = 4)]
        [switch]
        $force = $false
    )

    begin
    {
        $ErrorActionPreference = "Stop"
        $confirm = !$force

        # Set Language Pack URI
        switch ($targetOSVersion)
        {
            "Windows2012"   {
                                [uri]$lpUrl = "http://fg.v4.download.windowsupdate.com/msdownload/update/software/updt/2012/10"
                                $lpFile = "windowsserver2012-kb2607607-x64-jpn_d079f61ac6b2bab923f14cd47c68c4af0835537f.cab"
                            }
            "Windows2012R2" {
                                [uri]$lpurl = "http://fg.v4.download.windowsupdate.com/d/msdownload/update/software/updt/2013/09"
                                $lpfile = "lp_3d6c75e45f3247f9f94721ea8fa1283392d36ea2.cab"
                            }
        }

        $languagePackURI = "$lpurl/$lpfile"

        # set AutoLogin Configuration
        $autoLogonPath = "registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
        $adminUser = $credential.GetNetworkCredential().UserName
        $adminPassword = $credential.GetNetworkCredential().Password

        # This will run after Installation done and restarted Computer, then first login
        $RunOncePath = "registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
        $runOnceCmdlet = "
            Set-WinUILanguageOverride ja-JP;                                          # Change Windows UI to Japanese
            Set-WinHomeLocation 122;                                                  # Change Region to Japan
            Set-WinSystemLocal ja-JP                                                  # Set Non-Unicode Program Language to Japanese
            Set-ItemProperty -Path '$autoLogonPath' -Name 'AutoAdminLogon' -Value '0' # Disable AutoAdminLogon
            Remove-ItemProperty -Path '$autoLogonPath' -Name 'DefaultUserName'        # Remove UserName
            Remove-ItemProperty -Path '$autoLogonPath' -Name 'DefaultPassword'        # Remove Password
            Restart-Computer"
    }

    process
    {
        # Japanese UI
        Write-Verbose "Change Win User Language as ja-JP, en-US"
        Set-WinUserLanguageList ja-jp,en-US -Force

        # Set Japanese LanguagePack
        Write-Verbose ("Downloading JP Language Pack from '{0}' to '{1}'" -f $languagePackURI, $winTemp)
        Start-BitsTransfer -Source $languagePackURI -Destination $winTemp

        Write-Verbose ("Installing JP Language Pack from '{0}'" -f $winTemp)
        Add-WindowsPackage -Online -PackagePath (Join-Path $wintemp $lpfile -Resolve)

        Write-Verbose ("Output runonce cmd to execute PowerShell as '{0}'" -f $outputRunOncePs1)
        $runOnceCmdlet | Out-File -FilePath $outputRunOncePs1 -Encoding ascii

        Write-Verbose ("Set RunOnce registry")
        Set-ItemProperty -Path $RunOncePath -Name "SetupLang" -Value "powershell.exe -ExecutionPolicy RemoteSigned -file $outputRunOncePs1"

        # Set Japanese Keyboard : English - LayerDriver JPN : kbd101.dll
        Set-ItemProperty 'registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters' -Name 'LayerDriver JPN' -Value 'kbd106.dll'

        # Auto Login Settings
        Set-ItemProperty -Path $autoLogonPath -Name "AutoAdminLogon" -Value "1"
        Set-ItemProperty -Path $autoLogonPath -Name "DefaultUserName" -Value $adminUser
        Set-ItemProperty -Path $autoLogonPath -Name "DefaultPassword" -Value $adminPassword

        # Restart
        Write-Verbose ("Restart Computer, Make sure Login to")
        Restart-Computer -Confirm:$confirm -Force:$force
    }
}

利用方法

パターンがあるかと思います。

Windows Server 2012 の場合

-targetOSVersion で ポップアップがでるので、Windows2012を選択してください。 あとは、Administrator でのユーザー、パスワードで処理がされます。

Install-JapaneseUI -targetOSVersion Windows2012 -credential $(Get-Credential -Message "Input Administrator User and Password." -UserName Administrator) -Verbose

さらに -force スイッチを付けることで、言語パックインストール後の再起動が自動でかかります。

Install-JapaneseUI -targetOSVersion Windows2012 -credential $(Get-Credential -Message "Input Administrator User and Password." -UserName Administrator) -Verbose -force
Windows Server 2012 R2

-targetOSVersion で ポップアップがでるので、Windows2012R2を選択してください。 選択したOSに応じて言語パックをURIからダウンロードしてきます。 残りは一緒です。

Install-JapaneseUI -targetOSVersion Windows2012R2 -credential $(Get-Credential -Message "Input Administrator User and Password." -UserName Administrator) -Verbose

スクリプトをいちいちファイルで読まずに ワンライナーでいれたい

ファイルで取得とかいやですよねー。 PowerShell 上からワンライナーで実行するだけで日本語化しちゃいましょう!

GitHub せんせーを使えば簡単です。今回は api ではなく raw を直接読んでやりましょう。

Windows Server 2012 の場合
iex (Invoke-RestMethod https://raw.github.com/guitarrapc/PowerShellUtil/master/Install-JapaneseUI/Install-JapaneseUI.ps1);Install-JapaneseUI -targetOSVersion Windows2012 -credential (Get-Credential)
Windows Server 2012 R2 の場合
iex (Invoke-RestMethod https://raw.github.com/guitarrapc/PowerShellUtil/master/Install-JapaneseUI/Install-JapaneseUI.ps1);Install-JapaneseUI -targetOSVersion Windows2012R2 -credential (Get-Credential)

簡単でしょ?

まとめ

便利です。特にAWSを使っている人にとっては。 Get-Credential を使うことで、パスワード埋め込みを回避できるといい場面もあるかもしれませんね。

TimeZone は私の場合は valentia でまとめて設定しているので、ここではやりません。

あ、ごみが C:\Windows\Temp に..... ごめんなさい。