「PowerShellのエラーメッセージを英語で表示したい」
「日付のフォーマットが国によって違って困る」
システム管理や開発で、こんなふうに思ったことはありませんか?
そんな時に役立つのがPowerShellの言語設定(カルチャ設定)です。PowerShellでは、言語環境(カルチャ)を設定することで、コマンドレットから出るメッセージの言語や、日付・数値の表示フォーマットを自由に変更できます。
この記事では、PowerShellの言語設定を変更する方法や、日付・数字のフォーマットをカルチャごとにどう変えられるかを初心者向けに解説します。
PowerShellの言語(カルチャ)設定とは?

カルチャ(CultureInfo)の基本概念
カルチャ(CultureInfo
)は、Windowsが持つ言語と地域の設定情報です。これにより、以下のような表示形式が決まります:
項目 | 日本語(ja-JP) | 英語・アメリカ(en-US) | ドイツ語(de-DE) |
---|---|---|---|
日付表示 | 2025年7月5日 | July 5, 2025 | 5. Juli 2025 |
短い日付 | 2025/07/05 | 7/5/2025 | 05.07.2025 |
時刻表示 | 15:30:00 | 3:30:00 PM | 15:30:00 |
小数点 | 3.14 | 3.14 | 3,14 |
千の区切り | 1,000 | 1,000 | 1.000 |
通貨記号 | ¥ | $ | € |
PowerShellの2つのカルチャ設定
PowerShellには2つの重要なカルチャ設定があります:
設定 | 役割 | 影響する内容 |
---|---|---|
CurrentCulture | 数値・日付の表示フォーマット | Get-Date の出力、数値の小数点表記など |
CurrentUICulture | ユーザーインターフェース言語 | エラーメッセージ、警告、ヘルプの言語 |
現在のカルチャ設定を確認
基本的な確認方法
# 現在のカルチャ設定を確認
Get-Culture
実行結果例(日本語環境):
LCID Name DisplayName
---- ---- -----------
1041 ja-JP 日本語 (日本)
より詳細な情報を確認
# 現在のカルチャの詳細情報
$culture = Get-Culture
Write-Host "言語名: $($culture.Name)"
Write-Host "表示名: $($culture.DisplayName)"
Write-Host "日付パターン: $($culture.DateTimeFormat.ShortDatePattern)"
Write-Host "時刻パターン: $($culture.DateTimeFormat.ShortTimePattern)"
Write-Host "小数点記号: '$($culture.NumberFormat.NumberDecimalSeparator)'"
Write-Host "千の区切り: '$($culture.NumberFormat.NumberGroupSeparator)'"
UIカルチャも確認
# UIカルチャ(メッセージ言語)の確認
Get-UICulture
# 両方を一度に確認
Write-Host "データフォーマット用: $((Get-Culture).Name)"
Write-Host "メッセージ言語用: $((Get-UICulture).Name)"
PowerShellの言語を変更する方法

一時的な言語変更(現在のセッションのみ)
基本的な変更方法
# 英語(アメリカ)に変更
$culture = New-Object System.Globalization.CultureInfo("en-US")
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
# 変更を確認
Get-Culture
Get-UICulture
よく使われるカルチャコード
カルチャコード | 言語・地域 | 特徴 |
---|---|---|
ja-JP | 日本語(日本) | 年/月/日、24時間表記 |
en-US | 英語(アメリカ) | 月/日/年、12時間表記 |
en-GB | 英語(イギリス) | 日/月/年、24時間表記 |
de-DE | ドイツ語(ドイツ) | 日.月.年、カンマ小数点 |
fr-FR | フランス語(フランス) | 日/月/年、カンマ小数点 |
zh-CN | 中国語(簡体字) | 年/月/日、24時間表記 |
ko-KR | 韓国語(韓国) | 年. 月. 日、12時間表記 |
データフォーマットのみ変更
# データの表示フォーマットのみ変更(メッセージは日本語のまま)
$culture = New-Object System.Globalization.CultureInfo("en-US")
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
# UIカルチャはそのまま(日本語のメッセージが出続ける)
Write-Host "データフォーマット: $((Get-Culture).Name)"
Write-Host "メッセージ言語: $((Get-UICulture).Name)"
変更前後の比較実例
日付表示の変化
# 元の設定(日本語)で日付を表示
Write-Host "=== 日本語設定 ==="
Write-Host "現在の日時: $(Get-Date)"
Write-Host "短い日付: $(Get-Date -Format 'd')"
Write-Host "長い日付: $(Get-Date -Format 'D')"
# 英語(アメリカ)に変更
$culture = New-Object System.Globalization.CultureInfo("en-US")
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
Write-Host "`n=== 英語設定 ==="
Write-Host "現在の日時: $(Get-Date)"
Write-Host "短い日付: $(Get-Date -Format 'd')"
Write-Host "長い日付: $(Get-Date -Format 'D')"
実行結果例:
=== 日本語設定 ===
現在の日時: 2025年7月5日 15:30:25
短い日付: 2025/07/05
長い日付: 2025年7月5日
=== 英語設定 ===
現在の日時: Saturday, July 5, 2025 3:30:25 PM
短い日付: 7/5/2025
長い日付: Saturday, July 5, 2025
数値表示の変化
# 数値フォーマットの比較
function Show-NumberFormat {
param([string]$CultureName)
$culture = New-Object System.Globalization.CultureInfo($CultureName)
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
Write-Host "=== $CultureName ==="
Write-Host "大きな数値: $((1234567.89).ToString('N2'))"
Write-Host "通貨: $((1234.56).ToString('C'))"
Write-Host "パーセント: $((0.1234).ToString('P'))"
Write-Host ""
}
Show-NumberFormat "ja-JP"
Show-NumberFormat "en-US"
Show-NumberFormat "de-DE"
永続的な言語設定の方法
PowerShellプロファイルを使用した設定
プロファイルの場所を確認
# プロファイルのパスを確認
$PROFILE
# プロファイルが存在するかチェック
if (Test-Path $PROFILE) {
Write-Host "プロファイルが存在します: $PROFILE"
} else {
Write-Host "プロファイルがありません。作成する必要があります。"
}
プロファイルの作成と編集
# プロファイルを作成(存在しない場合)
if (!(Test-Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
Write-Host "プロファイルを作成しました: $PROFILE"
}
# プロファイルをメモ帳で開く
notepad $PROFILE
プロファイルに追加する設定例
# PowerShellプロファイルに追加する内容
# 英語環境に設定
$culture = New-Object System.Globalization.CultureInfo("en-US")
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
# 設定完了メッセージ
Write-Host "PowerShell言語設定: $((Get-Culture).DisplayName)" -ForegroundColor Green
より高度なプロファイル設定
# 条件付きカルチャ設定のプロファイル例
# 環境変数やコンピュータ名によって言語を切り替え
$computerName = $env:COMPUTERNAME
switch -Wildcard ($computerName) {
"*DEV*" {
# 開発環境では英語
$cultureName = "en-US"
}
"*PROD*" {
# 本番環境では日本語
$cultureName = "ja-JP"
}
default {
# デフォルトは英語
$cultureName = "en-US"
}
}
try {
$culture = New-Object System.Globalization.CultureInfo($cultureName)
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
Write-Host "言語設定完了: $cultureName ($($culture.DisplayName))" -ForegroundColor Green
} catch {
Write-Warning "言語設定でエラーが発生しました: $($_.Exception.Message)"
}
システム全体の設定変更
Windowsの地域設定との関係
PowerShellのカルチャ設定は、Windowsの地域設定と連動しています。
# システムの地域設定を確認
Get-WinSystemLocale
Get-WinUserLanguageList
Get-WinHomeLocation
# システム設定とPowerShellの関係を表示
Write-Host "システムロケール: $((Get-WinSystemLocale).Name)"
Write-Host "PowerShellカルチャ: $((Get-Culture).Name)"
Write-Host "PowerShell UIカルチャ: $((Get-UICulture).Name)"
実践的な応用例
多言語対応のログ出力
言語別ログファイルの作成
function Write-MultilingualLog {
param(
[string]$Message,
[string]$LogPath = "C:\logs",
[string[]]$Cultures = @("ja-JP", "en-US")
)
# 元のカルチャを保存
$originalCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
$originalUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
foreach ($cultureName in $Cultures) {
try {
# カルチャを変更
$culture = New-Object System.Globalization.CultureInfo($cultureName)
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
# 日時を現在のカルチャでフォーマット
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$logEntry = "[$timestamp] $Message"
# 言語別ログファイルに出力
$logFile = Join-Path $LogPath "log_$cultureName.txt"
$logEntry | Add-Content -Path $logFile -Encoding UTF8
Write-Host "$cultureName : $logEntry"
} catch {
Write-Warning "エラー ($cultureName): $($_.Exception.Message)"
}
}
# 元のカルチャに戻す
[System.Threading.Thread]::CurrentThread.CurrentCulture = $originalCulture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $originalUICulture
}
# 使用例
Write-MultilingualLog -Message "システム開始"
国際化対応の日付処理
function Format-DateForRegions {
param(
[DateTime]$Date = (Get-Date),
[string[]]$Regions = @("ja-JP", "en-US", "en-GB", "de-DE", "fr-FR")
)
$originalCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
Write-Host "=== 地域別日付フォーマット ==="
Write-Host "基準日時: $($Date.ToString('yyyy-MM-dd HH:mm:ss'))"
Write-Host ""
foreach ($region in $Regions) {
try {
$culture = New-Object System.Globalization.CultureInfo($region)
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
Write-Host "$region ($($culture.DisplayName)):"
Write-Host " 短い日付: $(Get-Date $Date -Format 'd')"
Write-Host " 長い日付: $(Get-Date $Date -Format 'D')"
Write-Host " 短い時刻: $(Get-Date $Date -Format 't')"
Write-Host " 長い時刻: $(Get-Date $Date -Format 'T')"
Write-Host ""
} catch {
Write-Warning "$region の処理でエラー: $($_.Exception.Message)"
}
}
[System.Threading.Thread]::CurrentThread.CurrentCulture = $originalCulture
}
# 使用例
Format-DateForRegions
スクリプトの一時的な言語変更
function Invoke-WithCulture {
param(
[string]$CultureName,
[scriptblock]$ScriptBlock
)
# 現在の設定を保存
$originalCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
$originalUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
try {
# 指定された言語に変更
$culture = New-Object System.Globalization.CultureInfo($CultureName)
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
Write-Host "言語を $CultureName に変更しました"
# スクリプトブロックを実行
& $ScriptBlock
} catch {
Write-Error "エラーが発生しました: $($_.Exception.Message)"
} finally {
# 元の設定に戻す
[System.Threading.Thread]::CurrentThread.CurrentCulture = $originalCulture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $originalUICulture
Write-Host "言語設定を元に戻しました"
}
}
# 使用例:英語環境で日付を表示
Invoke-WithCulture -CultureName "en-US" -ScriptBlock {
Write-Host "英語での日付表示: $(Get-Date)"
Write-Host "数値フォーマット: $((1234.56).ToString('N2'))"
}
よくあるトラブルと解決法

エラーパターン別の対処法
1. 無効なカルチャコードエラー
エラー例:
Culture is not supported. (Parameter 'name')
原因と対処:
# 無効なカルチャコード
try {
$culture = New-Object System.Globalization.CultureInfo("invalid-culture")
} catch {
Write-Host "エラー: $($_.Exception.Message)"
}
# 利用可能なカルチャを確認
[System.Globalization.CultureInfo]::GetCultures([System.Globalization.CultureTypes]::AllCultures) |
Where-Object { $_.Name -like "*US*" } |
Select-Object Name, DisplayName |
Format-Table -AutoSize
2. プロファイル読み込みエラー
対処法:
# プロファイルの構文エラーをチェック
try {
$profileContent = Get-Content $PROFILE -Raw
$scriptBlock = [scriptblock]::Create($profileContent)
Write-Host "プロファイルの構文は正常です"
} catch {
Write-Error "プロファイルに構文エラーがあります: $($_.Exception.Message)"
}
3. 権限不足エラー
# プロファイルディレクトリの作成権限確認
$profileDir = Split-Path $PROFILE -Parent
if (!(Test-Path $profileDir)) {
try {
New-Item -ItemType Directory -Path $profileDir -Force
Write-Host "プロファイルディレクトリを作成しました"
} catch {
Write-Error "プロファイルディレクトリを作成できません: $($_.Exception.Message)"
}
}
パフォーマンスに関する注意点
カルチャ変更の最適化
# 頻繁にカルチャを変更する場合は、オブジェクトを再利用
class CultureManager {
static [hashtable] $CultureCache = @{}
static [System.Globalization.CultureInfo] GetCulture([string]$cultureName) {
if (-not [CultureManager]::CultureCache.ContainsKey($cultureName)) {
[CultureManager]::CultureCache[$cultureName] = New-Object System.Globalization.CultureInfo($cultureName)
}
return [CultureManager]::CultureCache[$cultureName]
}
static [void] SetCulture([string]$cultureName) {
$culture = [CultureManager]::GetCulture($cultureName)
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
}
}
# 使用例
[CultureManager]::SetCulture("en-US")
高度な言語設定テクニック
カスタムカルチャの作成
# カスタム日付フォーマットの作成
function New-CustomCulture {
param(
[string]$BaseCulture = "en-US",
[string]$CustomDatePattern = "yyyy-MM-dd"
)
$culture = [System.Globalization.CultureInfo]::CreateSpecificCulture($BaseCulture)
$culture = $culture.Clone()
# 日付フォーマットをカスタマイズ
$culture.DateTimeFormat.ShortDatePattern = $CustomDatePattern
return $culture
}
# 使用例
$customCulture = New-CustomCulture -BaseCulture "ja-JP" -CustomDatePattern "yyyy/MM/dd"
[System.Threading.Thread]::CurrentThread.CurrentCulture = $customCulture
Write-Host "カスタムフォーマット: $(Get-Date -Format 'd')"
言語設定の診断ツール
function Get-PowerShellCultureInfo {
Write-Host "=== PowerShell言語設定診断 ===" -ForegroundColor Yellow
Write-Host ""
# 基本情報
Write-Host "📍 基本設定:" -ForegroundColor Cyan
Write-Host " CurrentCulture: $((Get-Culture).Name) - $((Get-Culture).DisplayName)"
Write-Host " CurrentUICulture: $((Get-UICulture).Name) - $((Get-UICulture).DisplayName)"
Write-Host ""
# システム情報
Write-Host "🖥️ システム設定:" -ForegroundColor Cyan
Write-Host " SystemLocale: $((Get-WinSystemLocale).Name)"
Write-Host " UserLanguage: $((Get-WinUserLanguageList)[0].LanguageTag)"
Write-Host ""
# フォーマット例
Write-Host "📅 フォーマット例:" -ForegroundColor Cyan
$now = Get-Date
Write-Host " 短い日付: $($now.ToString('d'))"
Write-Host " 長い日付: $($now.ToString('D'))"
Write-Host " 短い時刻: $($now.ToString('t'))"
Write-Host " 長い時刻: $($now.ToString('T'))"
Write-Host " 数値: $((1234.56).ToString('N2'))"
Write-Host " 通貨: $((1234.56).ToString('C'))"
Write-Host ""
# プロファイル情報
Write-Host "📝 プロファイル:" -ForegroundColor Cyan
if (Test-Path $PROFILE) {
Write-Host " プロファイル: 存在します ($PROFILE)"
$profileContent = Get-Content $PROFILE -Raw
if ($profileContent -match "CultureInfo|Culture|Language") {
Write-Host " 言語設定: プロファイルに言語関連の設定があります"
} else {
Write-Host " 言語設定: プロファイルに言語設定はありません"
}
} else {
Write-Host " プロファイル: 存在しません"
}
Write-Host ""
Write-Host "=== 診断完了 ===" -ForegroundColor Yellow
}
# 実行
Get-PowerShellCultureInfo
まとめ:PowerShellで多言語環境を活用しよう
Windows PowerShellの言語設定をマスターすることで、グローバルな開発・運用環境での作業効率が大幅に向上します。
今回学んだ重要ポイント
- カルチャの基本:
CurrentCulture
(データフォーマット)とCurrentUICulture
(メッセージ言語) - 設定確認:
Get-Culture
とGet-UICulture
で現在の状態を把握 - 一時変更: セッション内での言語切り替え
- 永続設定: プロファイルを使った起動時の自動設定
- 実用応用: 多言語ログ、国際化対応スクリプト
コメント