Esta respuesta se refiere al cultura actual, que determina configuraciones tales como formato de fecha, moneda, formato de número, secuencia de clasificación, ...; por el contrario, UI culture, determina el idioma de la UI (menús, mensajes de error, ...); Todos los elementos discutidos a continuación tienen análogos UI-cultivo (por ejemplo, Get-UICulture
vs. Get-Culture
, $PSUICulture
vs. $PSCulture
SALVO Set-Culture
, para la que no hay analógico
Cambio a una cultura diferente:.
En el .NET v4.6 Marco y superior, ahora puede asignar -[cultureinfo]::CurrentCulture
(anteriormente, era de sólo lectura [1]; el [cultureinfo]
Se introdujo el acelerador de tipo PS en PSv3); e.g .:
[cultureinfo]::CurrentCulture = 'de-DE'
es equivalente a (que también funciona en v4.5 o inferior, hasta al menos v2):
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'de-DE'
Claves clínicas: PowerShell utiliza los invariante cultura en contextos relacionadas con cadenas, independientemente de lo que la cultura actual es - ver this answer de mía.
Ambos métodos cambiar la cultura para el actual ejemplo PowerShell (thread) solamente.
- Como se ha señalado, con el fin de probar esto en una sesión interactiva PowerShell, escriba todos los comandos en una sola línea , ya que el efecto de cambio cultural se limita a una sola línea de comandos (esto todavía se aplica en PSv3 +, aunque las consolas allí se ejecutan en modo STA por defecto); por ejemplo, para imprimir una fecha Alemán:
[cultureinfo]::CurrentCulture = 'de-DE'; Get-Date # must be on same line
Para una persistente cambio cultura para el usuario actual, utilice el Set-Culture
cmdlet, pero, como se señala en mbx's helpful answer, este cambio sólo tiene efecto para futuras instancias de PowerShell, NO la actual.
Consulta de configuraciones de referencia cultural:
[cultureinfo]::CurrentCulture
y [System.Threading.Thread]::CurrentThread.CurrentCulture
reflejan efectiva la cultura actual del de ejemplo PowerShell.
Por el contrario, la Get-Culture
cmdlet (PSV3 +) y el automático $PSCulture
variable (PSV3 +; sólo lectura) reflejar invariablemente cultura del actual ejemplo PowerShell en inicio tiempo; es decir, que siempre reflejan la cultura persistentemente configurado del usuario actual en el momento de la instancia actual de PowerShell se inició (independientemente de-único caso cambios a través de [cultureinfo]::CurrentCulture = ...
o futuras cambios persistentes a través de Set-Culture
realizadas en esa instancia).
[1] Ver la docs; para determinar si tiene al menos v4.6 instalado, busque el valor Version:
en la salida de Get-Item 'registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'
.
Tenga en cuenta que framework versión es distinta de CLR (runtime) versión según lo informado por $PSVersionTable.CLRVersion
; por ejemplo, la estructura v4.6 se basa en la versión 4.0 CLR - ver docs.
No me arroja, pero la cultura no cambiado de esta manera. –
@Roman Descubrí el problema con la declaración y la corrigí. En C# funcionaría. –
@XMLforDummies: su excepción se ve mal, como si algo estuviera muy mal en su PowerShell. ¿Puedes escribir esto: '[System.Globalization.CultureInfo]'? ¿Funciona o falla también? –