Forcing PowerShell errors output in English on localized systems

后端 未结 2 1224
有刺的猬
有刺的猬 2020-11-27 21:51

I need to run some PowerShell scripts across various operating systems. Most of them are in English version, however, some are localized for example German, French, Spanish,

相关标签:
2条回答
  • 2020-11-27 21:53

    [Threading.Thread]::CurrentThread.CurrentUICulture only affects to current one-liner, so you can use it for execution of single .ps1 file.

    If you want to change messages to English throughout every command in a PowerShell window, you have to change the culture setting cached in PowerShell runtime with reflection like this:

    # example: Set-PowerShellUICulture -Name "en-US"
    
    function Set-PowerShellUICulture {
        param([Parameter(Mandatory=$true)]
              [string]$Name)
    
        process {
            $culture = [System.Globalization.CultureInfo]::CreateSpecificCulture($Name)
    
            $assembly = [System.Reflection.Assembly]::Load("System.Management.Automation")
            $type = $assembly.GetType("Microsoft.PowerShell.NativeCultureResolver")
            $field = $type.GetField("m_uiCulture", [Reflection.BindingFlags]::NonPublic -bor [Reflection.BindingFlags]::Static)
            $field.SetValue($null, $culture)
        }
    }
    

    (from https://gist.github.com/sunnyone/7486486)

    0 讨论(0)
  • 2020-11-27 22:09

    You can change the pipeline thread's CurrrentUICulture like so:

    [Threading.Thread]::CurrentThread.CurrentUICulture = 'fr-FR'; Get-Help Get-Process
    

    I'm on an English system but before I executed the line above, I updated help like so:

    Update-Help -UICulture fr-FR
    

    With that, the Get-Help call above gave me French help on my English system. Note: if I put the call to Get-Help on a new line, it doesn't work. Confirmed that PowerShell resets the CurrentUICulture before the start of each pipeline which is why it works when the commands are in the same pipeline.

    In your case, you would need to have folks install English help using:

    Update-Help -UICulture en-US
    

    And then execute your script like so:

    [Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'; .\myscript.ps1
    
    0 讨论(0)
提交回复
热议问题