Принудительный вывод ошибок 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)
}
}