既出のこれ、実は大変助かりました。
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 に..... ごめんなさい。