改变当前文化
Posted
技术标签:
【中文标题】改变当前文化【英文标题】:Change current culture 【发布时间】:2014-02-24 13:17:05 【问题描述】:大家好,
首先:我对强大的 powershell 世界很陌生 - 其次:我的问题是我想改变当前的文化来编辑 Excel 工作簿。
导致我对这个话题提出一个新问题的情况(是的,我知道有很多关于“”和“如何使用 powershell 编辑 excel 工作簿”的类似话题,别担心)是不是很多答案(如this)是一个很好的起点——但它对我不起作用!
所以这是我的实际问题: 我有一个脚本说
function Set-Culture ([System.Globalization.CultureInfo] $culture)
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
Get-Culture
Set-Culture('en-us')
Get-Culture
结果显示
LCID Name DisplayName
---- ---- -----------
3079 de-AT German (Austria)
3079 de-AT German (Austria)
但是(正如您从上面看到的)我希望将当前的文化更改为 en-US。我的错在哪里?
【问题讨论】:
【参考方案1】:如果您使用的是 PowerShell v2,则它是 MTA,这意味着 IIRC 您可以为每个管道调用获取不同的线程。 V1、V3 和 V4 是 STA,但是,我相信 PowerShell 在执行的某些点重置了文化。我相信类似以下的方法会更好:
function Using-Culture
param(
[Globalization.CultureInfo]$culture = (throw "USAGE: Using-Culture -Culture culture -Script scriptblock"),
[ScriptBlock]$script = (throw "USAGE: Using-Culture -Culture culture -Script scriptblock")
)
$OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
$OldUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
try
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
Invoke-Command $script
finally
[System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture
【讨论】:
以上是关于改变当前文化的主要内容,如果未能解决你的问题,请参考以下文章