嘿伙计们,
起初:我对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。哪里是我的错?
答案 0 :(得分:3)
如果您使用的是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
}
}