在本地化系统上强制使用英语输出PowerShell错误

str*_*ars 22 powershell

我需要跨各种操作系统运行一些PowerShell脚本.其中大多数都是英文版,但有些是本地化的,例如德语,法语,西班牙语等.问题是本地系统管理员现在大部分时间都没有PowerShell,如果脚本失败并向他们抛出错误,而不是读它,他们只是发送这样的错误信息的截图给我,如果这个错误的原因不明显,我很难打字到g.翻译以找出正在发生的事情.

是否有一个开关我可以运行整个脚本或单个命令或参数或任何其他方式强制PowerShell中的错误以英语显示而不是该特定机器的默认语言?

Kei*_*ill 18

您可以像这样更改管道线程的CurrrentUICulture:

[Threading.Thread]::CurrentThread.CurrentUICulture = 'fr-FR'; Get-Help Get-Process
Run Code Online (Sandbox Code Playgroud)

我在英语系统上,但在我执行上述行之前,我更新了这样的帮助:

Update-Help -UICulture fr-FR
Run Code Online (Sandbox Code Playgroud)

有了这个,上面的Get-Help电话给了我法语帮助我的英语系统.注意:如果我在新行上调用Get-Help,则不起作用.确认PowerShell在每个管道开始之前重置CurrentUICulture,这就是当命令在同一管道中时它工作的原因.

在您的情况下,您需要让人们使用以下方式安装英语帮助:

Update-Help -UICulture en-US
Run Code Online (Sandbox Code Playgroud)

然后像这样执行你的脚本:

[Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'; .\myscript.ps1
Run Code Online (Sandbox Code Playgroud)


SAT*_*uke 5

[Threading.Thread]::CurrentThread.CurrentUICulture 只影响当前的单行,所以你可以用它来执行单个 .ps1 文件。

如果要在 PowerShell 窗口中的每个命令中将消息更改为英语,则必须使用反射更改 PowerShell 运行时中缓存的区域性设置,如下所示:

# 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

(来自https://gist.github.com/sunnyone/7486486

  • (尽管有格式设置,此函数仍有效。) `function Set-PowerShellCulture { param([Parameter(Mandatory)] [cultureinfo] $culture) [System.Reflection.Assembly]::Load('System.Management.Automation'). GetType('Microsoft.PowerShell.NativeCultureResolver'). GetField('m_Culture', '非公共,静态'). SetValue($null, $culture) } ` (2认同)