2014/06/07

PowerShell キーボードを英語配列、または日本語配列に変更したい!

Hyper-Vの仮想マシンの一部においてキーボード配列が英語配列ではなく日本語配列になる事がありました。
レジストリを変更すればよい簡単な作業ですがPowerShellの勉強を兼ねてキーボードの配列を切り替える[Change-KbdLayout]関数を書いてみました。
物理環境の場合、キーボードが日本語配列ではなく英語配列になるケースがあります。その場合でも本スクリプトは使えるはずです。
注意点が一つ。
キーボード配列を変更後にPC/サーバの再起動が求められます
作業中の場合は、全てを保存されるようお願い致します。

スクリプト

[string]$Path = "HKLM:\SYSTEM\CurrentControlSet\services\i8042prt\Parameters"
$LDriverJP = @("kbd106.dll","kbd101.dll")
$OverKbdId = @("PCAT_106KEY", "PCAT_101KEY")
$OverKbdType = @(7, 7)
$OverKbdSType = @(2, 0)

function Change-KbdLayout(){

    Write-Host "★キーボード配列を変更します" -ForegroundColor Cyan
    Write-Host "[0] 日本語配列にする" -ForegroundColor Cyan
    Write-Host "[1] 英語配列にする" -ForegroundColor Cyan
    Write-Host "[9] 現在の設定を確認する" -ForegroundColor Cyan
    Write-Host "[q] 終了する" -ForegroundColor Cyan
    Write-Host ""
    Write-Host "番号を入力してください。" -NoNewline -ForegroundColor Yellow
    $Flag = Read-Host

    if(($Flag -eq 0) -or ($Flag -eq 1))
    {
        #レジストリ変更
        Set-ItemProperty -Path $Path -Name "LayerDriver JPN" -Value $LDriverJP[$Flag]
        Set-ItemProperty -Path $Path -Name "OverrideKeyboardIdentifier" -Value $OverKbdId[$Flag]
        Set-ItemProperty -Path $Path -Name "OverrideKeyboardType" -Value $OverKbdType[$Flag]
        Set-ItemProperty -Path $Path -Name "OverrideKeyboardSubtype" -Value $OverKbdSType[$Flag]

        Get-ItemProperty -Path $Path

        #再起動
        Write-Host "コンピュータを再起動します。" -ForegroundColor Yellow
        Write-Host "[Y]再起動する, [N]後で再起動する, 既定[N]:" -NoNewline -ForegroundColor Yellow
        $Return = Read-Host
        if($Return -eq "Y")
        {
            Restart-Computer -Force
            return
        }
    }
    elseif($Flag -eq 9)
    {
        Write-Host "★現在の設定"
        Get-ItemProperty -Path $Path
    }
    elseif($Flag -eq "q")
    {
        return
    }

    Change-KbdLayout
}

Change-KbdLayout
スポンサーリンク

スポンサーリンク