是否有任何PowerShell等效于:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
?或者如何设置强制所有stringfications独立于机器配置服从文化?
答案 0 :(得分:5)
我认为这会奏效:
$currentThread = [System.Threading.Thread]::CurrentThread
$culture = [System.Globalization.CultureInfo]::InvariantCulture
$currentThread.CurrentCulture = $culture
$currentThread.CurrentUICulture = $culture
这个想法来自:
http://blogs.msdn.com/b/powershell/archive/2006/04/25/583235.aspx
答案 1 :(得分:5)
这是我用于测试其他文化中的字符串/格式的函数:
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
}
}
答案 2 :(得分:5)
对于WinServer2012和Win8,您可以使用Set-Culture
。当Set-Culture
为您的用户设置文化时,您必须打开另一个PowerShell实例才能从中受益。它也不会改变运行ps实例的文化。当然,您可以在当前实例中启动新的PowerShell实例。 这不是所要求的,而是密切相关的。
如果将它们移植回Win7和Server 2008或将其作为powershell itselft的一个功能,它会很简洁。
答案 3 :(得分:1)
有关ObjectCmdletBase.Culture
属性的详细信息,请参阅here。
获取并设置Culture的值 派生cmdlet的参数。
答案 4 :(得分:1)
此答案涉及当前文化,它确定日期格式,货币,数字格式,整理顺序等设置。相比之下,当前的UI文化决定了UI语言(菜单,错误消息......);下面讨论的所有元素都有UI文化类比(例如,Get-UICulture
与Get-Culture
,$PSUICulture
与$PSCulture
除Set-Culture
之外,没有模拟
更改为其他文化:
在 .NET Framework v4.6 及更高版本中,您现在可以将分配给[cultureinfo]::CurrentCulture
(之前,它是只读 [1] ; [cultureinfo]
PS型加速器在PSv3中引入; e.g:
[cultureinfo]::CurrentCulture = 'de-DE'
相当于(也适用于v4.5或更低版本,至少为v2):
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'de-DE'
CAVEAT :PowerShell使用与字符串相关的上下文中的不变文化,,无论当前的文化是什么 - 见我的this answer。
两种方法仅更改当前 PowerShell实例(主题)的文化 。
[cultureinfo]::CurrentCulture = 'de-DE'; Get-Date # must be on same line
对于当前用户的持续文化更改,请使用 Set-Culture
cmdlet ,但是,如上所述mbx's helpful answer,此更改仅对 future PowerShell实例生效,而不是当前实例。
查询文化设置:
[cultureinfo]::CurrentCulture
和[System.Threading.Thread]::CurrentThread.CurrentCulture
反映当前 PowerShell实例的 有效文化强>
相比之下, Get-Culture
cmdlet (PSv3 +)和自动 $PSCulture
变量(PSv3 +;只读)总是反映出来当前PowerShell实例在启动时的文化;即,它们始终反映当前用户在当前PowerShell实例启动时持久配置的文化(无论是仅通过[cultureinfo]::CurrentCulture = ...
或 future 持久性的实例更改通过Set-Culture
在该实例中执行的更改。
[1]见docs;要确定您是否至少安装了v4.6,请在Version:
的输出中查找Get-Item 'registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
值。
请注意,框架版本与$PSVersionTable.CLRVersion
报告的 CLR (运行时)版本不同;例如,v4.6 框架基于v4.0 CLR - 请参阅docs。
答案 5 :(得分:0)
Set-Culture可在本地服务器上运行,但在远程计算机上运行时则不起作用
Invoke-Command -ComputerName $server -ScriptBlock{
#Requires -RunAsAdministrator
Set-Culture -CultureInfo en-GB;
Set-TimeZone -Id "GMT Standard Time"
}