Saltar al contenido

¿Cambiar temporalmente el idioma de PowerShell a inglés?

Este team de trabajo ha estado largas horas buscando soluciones a tus preguntas, te compartimos la soluciones por eso deseamos servirte de gran apoyo.

Solución:

  • (a) Para programas externos tal como netstat.exelamentablemente hay no forma (que yo sepa) de cambiar el idioma de la interfaz de usuario en sesión:

    • En Windows Server 2012/Windows 8 y superior, el Set-WinUILanguageOverride cmdlet te permite (persistentemente) cambiar el idioma de la interfaz de usuario de todo el sistema para el usuario actualpero eso solo tiene efecto en futuro sesiones de inicio de sesión, es decir, es necesario cerrar sesión y volver a iniciarla o reiniciar.

    • Aparte: en Windows Server 2012 / Windows 8 y superior, también está el Set-Culture cmdlet, pero es el propósito es no para cambiar el interfaz de usuario cultura (idioma de visualización)pero solo específicos de la cultura configuraciones tales como formatos de fecha, número y moneda. También cambia la configuración. continuamente para el usuario actual, pero solo requiere un nuevo sesión (proceso) para que el cambio surta efecto.

  • (B) Para Comandos de PowerShell y Tipos .NETallí es una solución en sesión (no persistente) – suponiendo que los comandos sean conscientes de la cultura y vengan con cadenas localizadas:

    • Colocar [cultureinfo]::CurrentUICulture (temporalmente) al nombre cultural deseado (utilice [cultureinfo]::GetCultures('SpecificCultures') para ver todos los predefinidos); p.ej, [cultureinfo]::CurrentUICulture = 'en-US'

      • Complementariamente, es posible que desee configurar [cultureinfo]::CurrentCulture (nótese lo que falta UI part) también, que determina el número, la fecha, … el formato específico de la cultura.
      • En versiones anteriores de PowerShell/.NET, deberá establecer estas propiedades en [System.Threading.Thread]::CurrentThread en lugar de; p.ej,
        [System.Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'
    • Vea la sección inferior para función auxiliar Use-Culture que envuelve esta funcionalidad para la ejecución de código mientras una cultura diferente está temporalmente en vigor.

Advertencias:

  • Potencia Shell [Core] en sí mismo es no localizado todavía a partir de v7.0; se realiza un seguimiento del progreso en esta edición de GitHub; sin embargo, la solución a continuación funciona con módulos de terceros que se envían con mensajes localizados y contenido de ayuda.

  • debido a un error en Windows PowerShell (Potencia Shell [Core] v6+ es no afectado), cambios en la sesión de [cultureinfo]::CurrentUICulture y [cultureinfo]::CurrentCulture están restablecer automáticamente en el símbolo del sistema, cada vez que un comando termina de ejecutarse; sin embargo, para una secuencia de comandos dada, los cambios permanecen vigentes para toda la secuencia de comandos y sus destinatarios; consulte esta respuesta.


Dando un paso atrás:

Escribí un software que usa la salida de los comandos del sistema (powershell), pero no preví que la salida sería diferente para otros idiomas además del inglés.

Esto es precisamente por qué generalmente vale la pena buscar Nativo de PowerShell soluciones en lugar de llamar programas externos:

En lugar de tener que analizar, posiblemente localizado, textoAl igual que con netstat.exepor ejemplo, los comandos de PowerShell devuelven objetos cuyas propiedades puede acceder de manera robusta de una manera independiente de la cultura.

Específicamente, Mathias R. Jessen sugiere mirar Get-NetTCPConnection como una alternativa de PowerShell a netstat.exe (disponible en Windows Server 2012 / Windows 8 y superior).


Para ayudar con (b)a continuación es función auxiliar Use-Cultureque puede usar de la siguiente manera para ejecutar un bloque de script determinado ( ... ) en el contexto de una determinada cultura (IU):

# Windows PowerShell: emit an error message in *French* (culture 'fr-FR')
# Note: Does not yet work as of PowerShell [Core] 7.0
PS> Use-Culture fr-FR  try  1/0  catch  "Localized message: $_"  
Localized message: Tentative de division par zéro.

Tenga en cuenta que el cambio cultural, tanto para la cultura como para la cultura de la interfaz de usuario, es alcance de comando; es decir, al finalizar el comando, la configuración anterior vuelve a tener efecto.


Función Use-Culturecódigo fuente:

Nota: El código fue adaptado agradecidamente de esta venerable publicación de blog.

# Runs a script block in the context of the specified culture, without changing 
# the session's culture persistently.
# Handy for quickly testing the behavior of a command in the context of a different culture.
# Example: 
#   Use-Culture fr-FR  Get-Date 
function Use-Culture
    
  param(
    [Parameter(Mandatory)] [cultureinfo] $Culture,
    [Parameter(Mandatory)] [scriptblock] $ScriptBlock
  )
  # Note: In Windows 10, a culture-info object can be created from *any* string.
  #        However, an identifier that does't refer to a *predefined* culture is 
  #        reflected in .LCID containing 4096 (0x1000)
  if ($Culture.LCID -eq 4096)  Throw "Unrecognized culture: $($Culture.DisplayName)" 

  # Save the current culture / UI culture values.
  $PrevCultures = [Threading.Thread]::CurrentThread.CurrentCulture, [Threading.Thread]::CurrentThread.CurrentUICulture

  try 
    # (Temporarily) set the culture and UI culture for the current thread.
    [Threading.Thread]::CurrentThread.CurrentCulture = [Threading.Thread]::CurrentThread.CurrentUICulture = $Culture

    # Now invoke the given code.
    & $ScriptBlock

      
  finally 
    # Restore the previous culture / UI culture values.
    [Threading.Thread]::CurrentThread.CurrentCulture = $PrevCultures[0]
    [Threading.Thread]::CurrentThread.CurrentUICulture = $PrevCultures[1]
  

El autor original de este código es @Scepticalist.

Ejecute esto desde la consola PowerShell. Cambiará la referencia cultural a en-US para la sesión actual.

function Set-CultureWin([System.Globalization.CultureInfo] $culture)  [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture ; [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture  ; Set-CultureWin en-US ; [system.threading.thread]::currentthread.currentculture

Entonces tienes que usar el comando Get-NetTCPConnection En lugar de netstat. Para su uso, consulte https://docs.microsoft.com/en-us/powershell/module/nettcpip/get-nettcpconnection?view=win10-ps

valoraciones y reseñas

Tienes la opción de avalar nuestra publicación poniendo un comentario o dejando una puntuación te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *