PowerShellでシステムのロケール設定を確認する方法

WindowsとPowerShellのlocale確認は短い一行でも扱えますが、入力の種類や版を確認しないまま本番へ使うと誤判定を招きます。この記事の結論は「Get-Cultureだけでsystemの全localeを表せません。current culture、UI culture、Windows system locale、home location、user language listを分けて読み、scriptではculture依存の文字列parseを避けます。」。format用culture、UI language、system locale、user language listを別々に取得する場合を対象に、確認結果から次の行動を選べる形で解説します。

目次

session cultureとUI cultureを別々に読む

locale調査は対象userとhostを確定し、culture関連値を個別に取得します。Get-Culture、Get-UICulture、Get-WinSystemLocaleがshell builtin、cmdlet、外部programのどれかも確認し、別実装のoptionを混在させません。

  • $PSCultureと$PSUICultureを確認する
  • Get-CultureとGet-UICultureを比較する
  • Get-WinSystemLocaleとGet-WinUserLanguageListを読む
  • timezone、encoding、region formatをlocaleと混同しない

system localeをnon-Unicode設定として確認する

PowerShell session culture

Get-Culture | Select-Object Name,LCID,DisplayName,DateTimeFormat,NumberFormat
Get-UICulture | Select-Object Name,LCID,DisplayName

formatとUI resourceのcultureは異なる場合があります。

Windows system locale

Get-WinSystemLocale | Select-Object Name,LCID,DisplayName

non-Unicode program向けsystem localeで、current user display languageとは別です。

user language list

Get-WinUserLanguageList | Select-Object LanguageTag,Autonym,EnglishName,InputMethodTips,Spellchecking

複数languageとinput methodを確認します。

地域とtimezoneを分ける

Get-WinHomeLocation
Get-TimeZone | Select-Object Id,DisplayName,BaseUtcOffset

region、culture、timezoneは独立設定です。

cultureを明示したparse

$culture=[Globalization.CultureInfo]::GetCultureInfo('ja-JP')
[datetime]::ParseExact('2026/07/17','yyyy/MM/dd',$culture)

外部dataのformat仕様を固定し、端末既定cultureに依存しません。

user language listと入力方式を記録する

  • Get-Cultureをsystem全体のlocaleとする
  • localeとtimezoneを混同する
  • display nameをlogicへ使う
  • implicit date/number parseに依存する
  • language list変更を無影響と考える

region・timezone・cultureを混同しない

LCIDはculture識別子で地域codeだけではありません。Get-Cultureはprocess/sessionのcurrent cultureを返し、起動方法や一時変更でOS設定と異なる場合があります。Get-WinSystemLocaleはsystem-wide、Get-WinUserLanguageListはuserごとです。曜日名やdecimal separatorをlogicへ直接使わず、invariantなdata形式を採用します。

parseには期待cultureとformatを明示する

読取commandは変更しません。Set-Culture、Set-WinSystemLocale、Set-WinUserLanguageListはapplication表示、legacy encoding、入力methodに影響し、sign-out/restartが必要な場合があります。変更前の全設定をexportし、test userでapplication互換性を確認し、失敗時は元culture/language listへ戻します。業務端末へ一括変更しません。

設定変更をせず差分だけ収集する

SettingsのLanguage & region、PowerShell各cmdlet、applicationのdate/decimal表示を照合します。current userとsystem scopeを作業記録で分け、別session再起動後も同じ値か確認します。変更なし調査ではlanguage listが前後で同じです。

decimal・date・offsetをsampleで検収する

Get-Cultureはsession/userのformat、Get-WinSystemLocaleはnon-Unicode program向けsystem locale、Get-WinUserLanguageListは表示/入力言語、Get-TimeZoneは時刻規則です。四つを別fieldで記録し、日付文字列のparseには明示cultureを渡します。

culture・system locale・timezoneを一行にまとめる

$c=Get-Culture
$sys=Get-WinSystemLocale
$tz=Get-TimeZone
[pscustomobject]@{Culture=$c.Name;LCID=$c.LCID;Decimal=$c.NumberFormat.NumberDecimalSeparator;SystemLocale=$sys.Name;TimeZoneId=$tz.Id;UtcOffset=$tz.GetUtcOffset((Get-Date))}

locale仕様差を取得不能と混同しない

  • locale情報を取得:各APIからName/LCID/LanguageTag/TimeZone Idを取得し、対象sessionの値として記録できる
  • 想定cultureと相違:設定項目が空/非適用でも他のlocaleと補完せずUnknownにする
  • International module error:cmdlet不在、policy、remote session差、parse errorは個別のErrorとして扱う

地域(HomeLocation)とtimezoneを同じ設定としません。CSV decimal separatorや日/月順を表示から推測せず、InvariantCultureまたは契約cultureを明示します。確認だけでuser language listを変更しません。

07/08/2026をja-JPとen-USで比較する

$ja=[Globalization.CultureInfo]::GetCultureInfo('ja-JP')
$us=[Globalization.CultureInfo]::GetCultureInfo('en-US')
'07/08/2026' | ForEach-Object { [pscustomobject]@{Text=$_;Ja=[datetime]::Parse($_,$ja);Us=[datetime]::Parse($_,$us)} }

ja-JP/en-US、decimal comma、DST有無、remote session、ambiguous dateをtestします。culture名、LCID、separator、timezone ID/offset、parse後ISO値を保存します。

Culture、SystemLocale、HomeLocation、TimeZoneは別設定です。曖昧な日付文字列をCurrentCultureへ任せず、source仕様のcultureとformatをParseExactへ渡します。

公式情報・参考資料

この記事を書いた人

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

コメント

コメントする

目次