如何在 PowerShell 中設置文化?
是否有任何 PowerShell 等效項:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;? 或者如何設置強制所有字元串化以獨立於機器配置服從文化?
這是我用於在其他文化中測試字元串/格式的功能:
function Using-Culture ( [System.Globalization.CultureInfo] $culture = (throw "USAGE: Using-Culture -Culture culture -Script {...}"), [ScriptBlock] $script = (throw "USAGE: Using-Culture -Culture culture -Script {...}")) { $OldCulture = [Threading.Thread]::CurrentThread.CurrentCulture $OldUICulture = [Threading.Thread]::CurrentThread.CurrentUICulture try { [Threading.Thread]::CurrentThread.CurrentCulture = $culture [Threading.Thread]::CurrentThread.CurrentUICulture = $culture Invoke-Command $script } finally { [Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture [Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture } }
這個答案處理目前文化,它決定了諸如日期格式、貨幣、數字格式、整理順序等設置;相比之下,目前的 UI 文化決定了 UI 語言(菜單、錯誤消息……);下面討論的所有元素都有 UI 文化類似物(例如,
Get-UICulturevs.Get-Culture,$PSUICulturevs.$PSCultureEXCEPTSet-Culture,沒有類似物。改變到不同的文化:
在**.NET Framework v4.6**及更高版本中,您現在可以分配給
[cultureinfo]::CurrentCulture(以前,它是只讀的$$ 1 $$;[cultureinfo]PSv3中引入了PS型加速器);例如:[cultureinfo]::CurrentCulture = 'de-DE'相當於(也適用於 v4.5 或更低版本,至少低至 v2):
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'de-DE'CAVEAT:PowerShell在與字元串相關的上下文中使用不變的文化,無論目前的文化是什麼- 請參閱我的這個答案。
這兩種方法僅更改目前PowerShell 實例(執行緒)的區域性。
- 警告[至少在 PowerShell Core v6.0.2 中已修復]:如前所述,為了在互動式PowerShell 會話中嘗試此操作,請在一行中輸入所有命令,因為文化改變效果僅限於單個命令行(這仍然適用於 PSv3+,即使那裡的控制台預設以 STA 模式執行);例如,列印一個德國日期:
[cultureinfo]::CurrentCulture = 'de-DE'; Get-Date # must be on same line對於目前使用者的持久文化更改,請使用**
Set-Culturecmdlet**,但是,正如mbx 的有用答案中所述,此更改僅對未來的 PowerShell 實例生效,而不是目前實例。查詢文化設置:
[cultureinfo]::CurrentCulture並[System.Threading.Thread]::CurrentThread.CurrentCulture反映目前PowerShell 實例的有效*文化*。- 相比之下,
Get-Culturecmdlet (PSv3+) 和自動**$PSCulture變數 (PSv3+;只讀) 在啟動時總是反映目前 PowerShell 實例的文化;即,它們始終反映目前使用者在啟動目前 PowerShell 實例時的持久配置區域性**(無論通過在該實例中執行的僅實例更改[cultureinfo]::CurrentCulture = ...或未來持久更改)。Set-Culture$$ 1 $$請參閱文件;要確定您是否至少安裝了 v4.6,請
Version:在輸出中查找Get-Item 'registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'.請注意,框架版本不同於;報告的CLR(執行時)版本。
$PSVersionTable.CLRVersion例如,v4.6框架基於 v4.0 CLR - 請參閱文件。