改变当前文化



嘿伙计们,

首先:我对PowerShell的强大世界很陌生 - 其次:我的问题是我想更改当前区域性以编辑Excel工作簿。

导致我问一个关于这个主题的新问题的情况(是的,我知道有很多关于"改变当前文化"和"如何使用 Powershell 编辑 excel 工作簿"的类似主题,别担心)是许多答案(像这样)是一个很好的起点 - 但它对我不起作用!

所以这是我的实际问题:我有一个脚本说

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。我的错误在哪里?

如果你使用的是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    
    }    
}

最新更新