PowerShell: изменение культуры текущей сессии
Я использую PowerShell на Windows Vista. Как я могу изменить культуру текущей сессии? Культура моего компьютера -TR-TR, поэтому я получаю сообщения об ошибках на турецком языке. Я хотел бы перейти на EN?
любой шанс?
1 ответ
Посмотрите здесь: http://blogs.msdn.com/b/powershell/archive/2006/04/25/583235.aspx
и здесь: http://poshcode.org/2226:
function Set-Culture([System.Globalization.CultureInfo] $culture)
{
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
}
Дополнительная информация
Чтобы найти, какие значения могут быть использованы для $culture
:
Это даст вам список типов культуры:
[Enum]::GetValues([System.Globalization.CultureTypes])
Выбрав один из вышеуказанных типов (например, AllCultures), вы можете затем перечислить доступные значения этого типа:
[System.Globalization.CultureInfo]::GetCultures( [System.Globalization.CultureTypes]::AllCultures )
Затем вы можете использовать имя или номер интересующей вас культуры в
GetCultureInfo
метод для получения значения, которое вы после:$culture = [System.Globalization.CultureInfo]::GetCultureInfo(1033) $culture = [System.Globalization.CultureInfo]::GetCultureInfo('en-US')
NB. Благодаря неявному преобразованию вы можете просто передать имя или номер культуры (например, в виде строки или целого числа) Set-Culture
метод, который будет автоматически преобразован в ожидаемое значение CultureInfo.
Поскольку принятое решение @manojlds на самом деле не работает (PS 5.1 на Windows 10), вот что у меня работает (можно найти на github):
$culture = [System.Globalization.CultureInfo]::CreateSpecificCulture("en-US")
$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)