既出のこれ、実は大変助かりました。
Language PackのダウンロードURL がわからなくてめんどくさくて投げていたのですが、せんせーがURLを出していてくださっています。
ということで、ちょっと自分が使いやすいようにしてみましょう。
何を設定したいのか
何をするにもまず、何をしたいのかを把握しましょう。
今回の場合は、英語環境から 完全な日本語環境への移行です。
よって、GUI でできるなら 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においておきます
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 に..... ごめんなさい。