PowerShellを使用してWindowsのGUI言語設定を変更する方法

GUI display languageでは、表示名ではなくinstalled language・preferred UI・user language listを最初の対象キーにします。変更や集計へ進む前にGet-InstalledLanguageと現在のUI languageを保存し、別対象を同じ結果へ混ぜないことが出発点です。

この手順の合格条件は「sign-out後にpreferred UIだけが目的言語になる状態」です。Microsoft Learn:Install-Languageのpack導入とSet-SystemPreferredUILanguageの選択を分離が定義するInstall-Languageのpack導入とSet-SystemPreferredUILanguageの選択を分離を根拠にし、画面へ値が出たことだけを成功とは判定しません。

停止条件:edition制約・offline端末・pack sourceが未確認。該当するときは操作を進めず、保存したpreferred UIとlanguage listへ戻すを実行可能な形で確認してから再計画します。

目次

GUI display language|成功を一つの状態で定義する:sign-out後にpreferred UIだけが目的言語になる状態

Windows表示言語設定を変更する場合は、元の名前、SID、言語リスト、ドメイン状態、復旧用管理者を保存してからGet-InstalledLanguageを一対象に限定します。合格はGet-InstalledLanguageで意図した値だけが変わった状態です。

Get-InstalledLanguageの出力では、SID、ユーザー/コンピューター名、スコープ、言語またはドメインが同じ対象を指しているかを見ます。値が変わっていても別対象なら失敗であり、変更前の表示言語、ユーザー言語、システムロケールを別々に保存し、同じ階層の値へ戻す。サインアウト後に確認する。

判断要素Windows表示言語設定で記録する内容
対象の識別SID、ユーザー/コンピューター名、スコープ、言語またはドメイン
最初の確認Get-WinUserLanguageList
変更または操作Get-InstalledLanguage
再確認Get-InstalledLanguage
中止条件再起動後のログオンや認証を保証できず、代替管理者がない

GUI display language|再取得できる初期値を控える:Get-InstalledLanguageと現在のUI language

「PowerShellを使用してWindowsのGUI言語設定を変更する方法」でWindows表示言語設定を判断する場面では、次のGet-WinUserLanguageListを実行するときは、開始時刻と対象件数も記録します。UACトークン、ローカル/ドメインの混同、言語スコープ、権限不足があるため、空結果だけで対象なしと結論づけません(Windows表示言語設定では現在のユーザーの範囲でGet-WinUserLanguageListが返す固有値を基準にします)。

$base = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-ui-language-before'
$jsonPath = "$base.json"; $listPath = "$base.xml"
if (Test-Path $jsonPath -or Test-Path $listPath) { throw 'UI language backup already exists' }
$targetLanguage = 'en-US'
$oldPreferred = Get-SystemPreferredUILanguage -ErrorAction Stop
$oldList = @(Get-WinUserLanguageList -ErrorAction Stop)
$installedBefore = $null -ne (Get-InstalledLanguage -Language $targetLanguage -ErrorAction SilentlyContinue)
$oldList | Export-Clixml -LiteralPath $listPath -ErrorAction Stop
[ordered]@{ Schema=1; Target=$targetLanguage; OldPreferred=$oldPreferred; InstalledBefore=$installedBefore } | ConvertTo-Json | Set-Content -LiteralPath $jsonPath -Encoding utf8 -NoNewline -ErrorAction Stop
Get-Content -Raw $jsonPath | ConvertFrom-Json; Import-Clixml $listPath | Select-Object LanguageTag, InputMethodTips

表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定。言語パックの取得にはネットワークと再起動が必要な場合がある。 そのため、Get-WinUserLanguageListの値は別の公式な取得経路またはGet-InstalledLanguageと照合します。

GUI display language|操作対象の境界を引く:installed language・preferred UI・user language list

Windows表示言語設定で使うPowerShellの版は $PSVersionTable で、コマンドの提供元は Get-Command Get-WinUserLanguageList で確認します。現在のユーザー。システム全体変更は管理者。対象候補が複数ならSID、ユーザー/コンピューター名、スコープ、言語またはドメインを使い、表示名の部分一致だけで選びません(Windows表示言語設定では現在のユーザーの範囲でGet-WinUserLanguageListが返す固有値を基準にします)。

  • Windows表示言語設定: 実行端末と現在ユーザーを記録する
  • Get-WinUserLanguageList: Source、Version、利用可能なパラメーターを確認する(Windows表示言語設定の判断では「表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定」を優先し、Get-InstalledLanguageが空なら成功扱いしません)。
  • SID、ユーザー/コンピューター名、スコープ、言語またはドメイン: 変更前の値を日時付きで保存する
  • 元の名前、SID、言語リスト、ドメイン状態、復旧用管理者: 復旧に使えることを読み取り確認する
  • 再起動後のログオンや認証を保証できず、代替管理者がない: 該当すれば本番実行を見送る

表示言語の判断では、導入済み言語パック、System Preferred UI Language、現在ユーザーのlanguage list、現在プロセスのUICultureを別々に保存します。入力言語やSystemLocaleの変化を表示言語の成功条件へ混ぜません。

Windows表示言語設定の「PowerShellの利点」では、Get-WinUserLanguageListの取得時刻と対象件数を残します。後からGet-InstalledLanguageを実行したとき、PowerShellの利点の差分理由を説明できる形にします。

システムのGUI言語設定を変更する方法の確認結果はWindows表示言語設定の変更可否に直結します。再起動後のログオンや認証を保証できず、代替管理者がないなら、システムのGUI言語設定を変更する方法の調査記録を残して実行を見送ります。

「基本的なコード例」の値が想定と違う場合、UACトークン、ローカル/ドメインの混同、言語スコープ、権限不足を切り分けます。表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定。言語パックの取得にはネットワークと再起動が必要な場合がある。 ため、基本的なコード例を強制的に書き換えて症状を隠しません。

一時的な表示確認と永続設定は分けます。Set-SystemPreferredUILanguageを実行した場合はサインアウトまたは再起動後に再取得し、変更前のpreferred UI languageへ戻す手順も同じ端末で確認します。

複数言語を保持するときはGet-WinUserLanguageListの順序とInputMethodTipsを保存し、System Preferred UI Languageは一つのBCP-47 tagとして管理します。言語リストの追加だけを表示言語の切替完了とは判定しません。

Windows表示言語設定でGet-WinUserLanguageListを使う前に、Get-Command Get-WinUserLanguageListでSourceとVersionを確認します。別モジュールの同名コマンドを実行しないためです。

Get-SystemPreferredUILanguageはWindows表示言語設定の2番目の確認手段です。Get-Help Get-SystemPreferredUILanguage -Fullで利用できるパラメーターを調べ、出力型と対象件数を記録します。

Windows表示言語設定でGet-WinSystemLocaleが利用できない場合、Editionやモジュールを確認します。存在しない代替コマンドを作らず、公式の設定経路へ切り替えます。

Get-InstalledLanguageへ渡す対象はSID、ユーザー/コンピューター名、スコープ、言語またはドメインで一意にします。Windows表示言語設定の表示名だけを部分一致させて複数件を処理しません。

Windows表示言語設定の検証ではInstall-Languageが返すオブジェクトを文字列だけに変換せず、固有IDと状態列を残します。後段の比較に使えるためです。

Start-Processの空結果は成功とは限りません。Windows表示言語設定ではUACトークン、ローカル/ドメインの混同、言語スコープ、権限不足を調べ、エラーを非表示にした場合も件数へ含めます。

GUI display language|戻せる材料を先にそろえる:保存したpreferred UIとlanguage listへ戻す

Windows表示言語設定の変更前には元の名前、SID、言語リスト、ドメイン状態、復旧用管理者を保存します。保存したファイルや値が実際に読めることを確認し、同じ端末内の上書きだけをバックアップと呼びません(Windows表示言語設定では現在のユーザーの範囲でGet-WinUserLanguageListが返す固有値を基準にします)。

GUI display language|previewから限定実行へ進む:installed language・preferred UI・user language list

Windows表示言語設定でGet-InstalledLanguageを使う例は一対象に限定しています。WhatIfを利用できる場合は先に対象を表示し、外部コマンドでは読み取りオプションか検証端末を使います(Windows表示言語設定の判断では「表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定」を優先し、Get-InstalledLanguageが空なら成功扱いしません)。

$base = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-ui-language-before'
$backup = Get-Content -Raw "$base.json" -ErrorAction Stop | ConvertFrom-Json
$targetLanguage = [string]$backup.Target
[pscustomobject]@{ Before=$backup.OldPreferred; Proposed=$targetLanguage; InstallPack=(-not [bool]$backup.InstalledBefore) }
if ((Read-Host 'Type APPLY-UI-LANGUAGE') -cne 'APPLY-UI-LANGUAGE') { throw 'Cancelled' }
if (-not [bool]$backup.InstalledBefore) { Install-Language -Language $targetLanguage -ErrorAction Stop }
Set-SystemPreferredUILanguage -Language $targetLanguage -ErrorAction Stop
if ((Get-SystemPreferredUILanguage -ErrorAction Stop) -ne $targetLanguage) { throw 'Preferred UI readback failed' }
Write-Host 'Sign out, sign in, and run the standalone verification block.'

Get-InstalledLanguageが何も返さなくても成功とは判断しません。Get-InstalledLanguageと関連機能の利用テストを続けます。

GUI display language|件数と識別値で合否を決める:sign-out後にpreferred UIだけが目的言語になる状態

Get-InstalledLanguageでは、変更前に保存したSID、ユーザー/コンピューター名、スコープ、言語またはドメインと同じ対象を選びます。現在プロセス、ユーザースコープ、システムスコープを分けて再取得することで、別スコープの値を成功結果として採用しません(Windows表示言語設定では現在のユーザーの範囲でGet-WinUserLanguageListが返す固有値を基準にします)。

$base = Join-Path ([Environment]::GetFolderPath('MyDocuments')) 'ittrip-ui-language-before'
$mode = 'VERIFY_APPLIED' # ROLLBACK または VERIFY_ROLLBACK
$backup = Get-Content -Raw "$base.json" -ErrorAction Stop | ConvertFrom-Json
$oldList = @(Import-Clixml -LiteralPath "$base.xml" -ErrorAction Stop)
if ($mode -eq 'VERIFY_APPLIED') {
  if ((Get-SystemPreferredUILanguage -ErrorAction Stop) -ne $backup.Target) { throw 'Post-sign-out UI language mismatch' }
  if ((Read-Host 'After checking Settings and an actual window, type UI-TEST-PASSED') -cne 'UI-TEST-PASSED') { throw 'Actual UI not verified' }
} elseif ($mode -eq 'ROLLBACK') {
  if ((Read-Host 'Type ROLLBACK-UI-LANGUAGE') -cne 'ROLLBACK-UI-LANGUAGE') { throw 'Cancelled' }
  Set-SystemPreferredUILanguage -Language ([string]$backup.OldPreferred) -ErrorAction Stop
  Set-WinUserLanguageList -LanguageList $oldList -Force -ErrorAction Stop
  if (-not [bool]$backup.InstalledBefore -and (Read-Host 'Type REMOVE-NEW-PACK to uninstall the pack installed by this run') -ceq 'REMOVE-NEW-PACK') { Uninstall-Language -Language ([string]$backup.Target) -ErrorAction Stop }
  Write-Host 'Sign out and rerun with VERIFY_ROLLBACK.'
} elseif ($mode -eq 'VERIFY_ROLLBACK') {
  if ((Get-SystemPreferredUILanguage -ErrorAction Stop) -ne $backup.OldPreferred) { throw 'Preferred UI rollback mismatch' }
  if ((@(Get-WinUserLanguageList) | ConvertTo-Json -Depth 8) -ne ($oldList | ConvertTo-Json -Depth 8)) { throw 'User language list rollback mismatch' }
} else { throw 'Unsupported mode' }
  • Get-InstalledLanguage: 同じ対象IDを再取得できた
  • Windows表示言語設定: 意図した値または件数だけが変化した
  • 現在プロセス、ユーザースコープ、システムスコープを分けて再取得する: 関連機能も異常がない
  • UACトークン、ローカル/ドメインの混同、言語スコープ、権限不足: 取得失敗をゼロ件として扱っていない(Windows表示言語設定の判断では「表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定」を優先し、Get-InstalledLanguageが空なら成功扱いしません)。
  • 表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定。言語パックの取得にはネットワークと再起動が必要な場合がある。: 環境固有の制約に反していない

GUI display language|不明な状態を成功へ丸めない:edition制約・offline端末・pack sourceが未確認

「PowerShellを使用してWindowsのGUI言語設定を変更する方法」の対象をWindows表示言語設定として検証するときは、Get-WinUserLanguageListの結果が空なら、UACトークン、ローカル/ドメインの混同、言語スコープ、権限不足を一つずつ確認します。ErrorActionで隠した例外をゼロ件として集計しません。

Windows表示言語設定が時間経過後に元へ戻る場合は、GPO/MDM、同期、サービス再起動、別スコープを調べます。繰り返し上書きして管理設定と競合させません。

再起動後のログオンや認証を保証できず、代替管理者がない状態はWindows表示言語設定の中止条件です。復旧に必要な人・経路・データが揃うまで、本番端末ではGet-InstalledLanguageを実行しません。

GUI display language|復旧失敗時の停止点を置く:保存したpreferred UIとlanguage listへ戻す

変更前の表示言語、ユーザー言語、システムロケールを別々に保存し、同じ階層の値へ戻す。サインアウト後に確認する。

Windows表示言語設定を戻した後はGet-WinUserLanguageListとGet-InstalledLanguageを再実行し、SID、ユーザー/コンピューター名、スコープ、言語またはドメインが変更前記録と一致することを確認します。復旧処理にも失敗したら連続操作を止め、保存した元の名前、SID、言語リスト、ドメイン状態、復旧用管理者とログを担当者へ渡します(Windows表示言語設定では現在のユーザーの範囲でGet-WinUserLanguageListが返す固有値を基準にします)。

GUI display language|引継ぎに必要な列を残す:Get-InstalledLanguageと現在のUI language

  • Get-WinUserLanguageListの実行時刻、対象件数、エラー件数を残した
  • SID、ユーザー/コンピューター名、スコープ、言語またはドメインで対象を一意に特定した
  • 元の名前、SID、言語リスト、ドメイン状態、復旧用管理者を変更前に保存して読めることを確認した
  • Get-InstalledLanguageの対象を一端末・一ユーザー・一設定に限定した
  • Get-InstalledLanguageと実利用テストの両方を確認した
  • 再起動後のログオンや認証を保証できず、代替管理者がない場合は実行を中止した

断定できません。Windows表示言語設定ではUACトークン、ローカル/ドメインの混同、言語スコープ、権限不足でも空になります。エラーを表示し、権限とスコープを確認してからGet-InstalledLanguageまたは別の公式な取得方法で照合します。

GUI display language|運用で生じる疑問を切り分ける:system accountとcurrent userの表示言語差

権限だけが原因とは限りません。表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定。言語パックの取得にはネットワークと再起動が必要な場合がある。 再起動後のログオンや認証を保証できず、代替管理者がないなら昇格して続行せず、対応Edition、対象ID、ポリシー、復旧経路を確認します(Windows表示言語設定の判断では「表示言語、入力言語、地域形式、非Unicodeプログラム用ロケールは別設定」を優先し、Get-InstalledLanguageが空なら成功扱いしません)。

公式情報・参考資料

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次