Этот ответ касается текущей культуры , которая определяет такие параметры, как формат даты, валюта, форматирование чисел, последовательность сортировки, ...; напротив, текущая культура пользовательского интерфейса определяет язык пользовательского интерфейса (меню, сообщения об ошибках, ...); Все элементы, обсуждаемые ниже, имеют аналоги UI-культуры (например, Get-UICulture
против Get-Culture
, $PSUICulture
против $PSCulture
ИСКЛЮЧИТЬ Set-Culture
, для которых нет аналога.
Переход на другую культуру :
В .NET Framework v4.6 и выше, теперь вы можете назначить на [cultureinfo]::CurrentCulture
(ранее это было только для чтения [1] ; в PSv3 был введен ускоритель типа [cultureinfo]
PS; e.g.:
[cultureinfo]::CurrentCulture = 'de-DE'
эквивалентно (который также работает в v4.5 или ниже, по крайней мере до v2):
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'de-DE'
CAVEAT : PowerShell использует инвариантную культуру в строковых контекстах, независимо от текущей культуры - см. этот ответ мой.
Оба метода изменяют культуру для текущего экземпляра PowerShell (поток) * только 1051 * .
- Предостережение [исправлено в PowerShell Core как минимум с v6.0.2]: как уже отмечалось, для того, чтобы попробовать это в интерактивном PowerShell сеанс, введите все команды в одной строке, потому что эффект изменения культуры ограничен одной командной строкой (это все еще применяется к PSv3 +, даже если консоли там работают в режиме STA по умолчанию); например, чтобы напечатать немецкую дату:
[cultureinfo]::CurrentCulture = 'de-DE'; Get-Date # must be on same line
Для постоянных изменений культуры для текущего пользователя используйте командлет Set-Culture
, но, как отмеченный в полезном ответе mbx , это изменение вступает в силу только для будущих экземпляров PowerShell, а НЕ текущего.
Запрос настроек культуры:
[cultureinfo]::CurrentCulture
и [System.Threading.Thread]::CurrentThread.CurrentCulture
отражают текущий экземпляр PowerShell эффективный культура .
В отличие от этого Get-Culture
командлет (PSv3 +) и автоматическая переменная $PSCulture
(PSv3 +; только для чтения) неизменно отражать текущую культуру экземпляра PowerShell при времени запуска ; то есть они всегда отражают постоянно настраиваемую культуру текущего пользователя во время запуска текущего экземпляра PowerShell (независимо от изменений только для экземпляра с помощью [cultureinfo]::CurrentCulture = ...
или будущих постоянных изменений с помощью Set-Culture
выполнено в этом случае).
[1] См. документы ; чтобы определить, установлен ли у вас хотя бы v4.6, найдите значение Version:
в выходных данных Get-Item 'registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
.
Обратите внимание, что версия framework отличается от версии CLR (runtime), о которой сообщает $PSVersionTable.CLRVersion
; например, v4.6 framework основан на v4.0 CLR - см. документы .