我想在当前的交互式Powershell会话中更改已接受数据和错误的文化。我在SuperUser上了解了这个问题powershell : changing the culture of current session和问题Changing current culture。它不能与Powershell 3.0和4.0一起使用的主要问题。
PS C:\users\me\Documents> [system.threading.thread]::currentthread.currentculture
LCID Name DisplayName
---- ---- -----------
1049 ru-RU Русский (Россия)
PS C:\users\me\Documents> [system.threading.thread]::currentthread.currentculture=[system.globalization.cultureinfo]"en-US"
PS C:\users\me\Documents> [system.threading.thread]::currentthread.currentculture
LCID Name DisplayName
---- ---- -----------
1049 ru-RU Русский (Россия)
UI文化也不接受新设置。总共Set-Culture
无效,无论我是否使用管理员权限 - 无论如何,它不应受此影响,因为效果仅适用于单个流程。来自SO社区的MSDN Powershell博客的Using-Culture
可以工作,但只是部分地,例如,当前的文化" ru-RU"我可以在" 6/19/15 2:26:02 PM"字符串,位于" en-US"通过Using-Culture "en-US" {get-date -date "6/19/15 2:26:02 PM"}
进行文化,但是无法接收其他语言的错误:说Using-Culture "en-US" {$null.test='1'}
会导致俄语区域设置出错,就好像文化没有改变一样。
此行为在安装了Powershell 4.0的本地Win7 Professional工作站上进行了测试,并安装了安装了Powershell 3.0的Windows Server 2012,这需要解析错误的本地化日期字符串。后者拥有" en-US"和系统区域设置" ru-RU"。
所以,PS3及以上版本仍然可以改变Powershell会话的文化,如果是的话,怎么样? (或者它是否会再次出现错误,或者我不知道PS3的变化?)
答案 0 :(得分:1)
更改文化仅影响线程,仅适用于该过程。 您的PS窗口是在当前语言环境下启动的,因此该线程具有该语言环境。在当前系统区域设置下启动的PS窗口中键入“[System.Threading.Thread] :: CurrentThread.CurrentCulture”将始终显示该区域设置。
如果你在ISE中运行它,它应该解释一下:
function Set-Culture([System.Globalization.CultureInfo] $culture) {
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture }
Set-Culture en-US
[system.threading.thread]::currentthread.currentculture
Pause
或者,在PS窗口中:
function Set-Culture([System.Globalization.CultureInfo] $culture) { [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture ; [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture } ; Set-Culture en-US ; [system.threading.thread]::currentthread.currentculture
工作正常。
如果您想要一个具有新文化的PS窗口,您需要使用该文化启动它,而不是尝试在之后进行更改。