Принудительный вывод ошибок PowerShell на английском языке в локализованных системах

Мне нужно запустить несколько скриптов PowerShell в разных операционных системах. Большинство из них написаны на английском языке, однако некоторые локализованы, например, на немецком, французском, испанском и т. Д. Проблема заключается в том, что локальные системные администраторы в большинстве случаев не используют PowerShell, и в случае сбоя сценария он выдает ошибку вместо них. читая его, они просто посылают мне скриншоты таких сообщений об ошибках, и если причина этой ошибки не очевидна, я застреваю с вводом g. перевести, чтобы узнать, что происходит.

Есть ли переключатель, с помощью которого я могу запустить весь сценарий или отдельную команду с параметром или любым другим способом, чтобы ошибки в PowerShell отображались на английском языке вместо языка, используемого по умолчанию для этой конкретной машины?

1 ответ

Вы можете изменить CurrrentUICulture потока конвейера следующим образом:

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

Я использую английскую систему, но перед тем, как выполнить приведенную выше строку, я обновил справку следующим образом:

Update-Help -UICulture fr-FR

После этого приведенный выше вызов Get-Help помог мне с французским в моей английской системе. Примечание: если я вызову Get-Help на новой линии, это не сработает. Подтвердил, что PowerShell сбрасывает CurrentUICulture перед запуском каждого конвейера, поэтому он работает, когда команды находятся в одном конвейере.

В вашем случае вам нужно, чтобы люди установили английскую справку, используя:

Update-Help -UICulture en-US

А затем выполните ваш скрипт так:

[Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'; .\myscript.ps1

[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)
    }
}

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

Другие вопросы по тегам