Personalizar la fuente y el tamaño de fuente de PowerShell

10

Tenemos varios sistemas centrales de servidor de Windows 2012 con configuración de PowerShell como shell predeterminado que utiliza los siguientes comandos:

$RegPath = "Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\winlogon"
Set-ItemProperty -Confirm  -Path $RegPath -Name Shell -Value 'cmd.exe /C start /max PowerShell.exe -noExit'

He descubierto que podemos personalizar el color de fuente de PowerShell con un script especial de PowerShell en c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1. Este script es utilizado por todos los usuarios.

Sin embargo, ahora quiero personalizar la fuente y el tamaño de fuente (nuevamente para todos los usuarios) que es persistente. IE Si me desconecto del servidor y me conecto nuevamente, quiero que se conserve la configuración. Del mismo modo, si inicio sesión como administrador, o mi propia cuenta, PowerShell debería tener un aspecto idéntico: use el mismo color de fuente, la misma fuente y el mismo tamaño de fuente.

Con Powershell ISE parece posible configurar la fuente y el tamaño de fuente usando:

$psISE.Options.FontName = 'Lucida Sans Console' 
$psISE.Options.FontSize = 14

¿Cuál es el equivalente de Powershell en sí?

Puntilla
fuente

Respuestas:

4

Powershell (no el ISE) aprovecha el "Host de consola", que es una actualización un poco más moderna del antiguo símbolo del sistema de MS-DOS. El Host de consola era la forma en que Microsoft mantenía el símbolo del sistema compatible con las versiones modernas de Windows, pero también compatible con las aplicaciones de consola antiguas.

Cuando inicia Powershell.exe, csrss.exe genera un proceso secundario llamado conhost.exe. Este comportamiento es idéntico al que inicia Cmd.exe.

Pero como tenían que mantener la compatibilidad con las aplicaciones de consola antiguas, no podían cambiar la apariencia demasiado , ni podían cambiar y romper un montón de interfaces internas.

No voy a decir que es imposible, pero es más difícil de lo que uno pensaría.

No hay nada adentro (Get-Host).UI.RawUI. No hay nada en la System.Consoleclase .NET.

Puede cambiar la fuente y el tamaño de la fuente en el registro haciendo algo como esto:

(editar: guiones bajos no barras)

Set-Location HKCU:\Console
New-Item '.\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe'
Set-Location '.\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe'

New-ItemProperty . FaceName -type STRING -value "Lucida Console"
New-ItemProperty . FontFamily -type DWORD -value 0x00000036
New-ItemProperty . FontSize -type DWORD -value 0x000c0000
New-ItemProperty . FontWeight -type DWORD -value 0x00000190

También hay un montón de exportaciones en kernel32.dll que cambian la fuente:

typedef struct _CONSOLE_FONT {

   DWORD index;

   COORD dim;

} CONSOLE_FONT; 

BOOL WINAPI SetConsoleFont(HANDLE hOutput, DWORD fontIndex);
BOOL WINAPI GetConsoleFontInfo(HANDLE hOutput, BOOL bMaximize, DWORD numFonts, CONSOLE_FONT* info);
DWORD WINAPI GetNumberOfConsoleFonts();
BOOL WINAPI SetConsoleIcon(HICON hIcon);
Ryan Ries
fuente
Traté de usar el código anterior para cambiar la fuente a través del registro (pero no parece haber hecho nada). ¿Se requiere algo para que la configuración surta efecto?
Brad
Parece que las claves de registro correctas (al menos para Windows Server 2012) son un poco diferentes Set-Location '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' y Set-Location '. \% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe' y Parece que el código se está ejecutando, pero mi fuente no cambia la consola de PowerShell.
Brad
Usando este módulo: gallery.technet.microsoft.com/scriptcenter/… Pude cambiar las fuentes pero parece que las opciones son muy limitadas. En realidad, las fuentes disponibles para mí terminaron siendo distorsionadas, demasiado grandes o demasiado pequeñas. Estoy tratando de descubrir cómo puedo seleccionar diferentes tamaños de fuente.
Brad
1
Sí, la persona que escribió eso es PInvoking esas exportaciones de kernel32.dll de las que estaba hablando. Y sí, las opciones son bastante limitadas. Es por eso que cuando cambia la fuente para cualquier aplicación de consola a través de la GUI, solo tiene 3 opciones de fuente. No puede tener Comic Sans en su aplicación de consola, incluido Powershell. En el guión de ese tipo, está configurando la fuente con Set-ConsoleFont 28. Cada número de fuente tiene una altura y ancho predeterminados. Justo como cuando lo cambias en la GUI.
Ryan Ries
Parece que algo tan simple como cambiar la fuente y el tamaño de la fuente (que uno supondría que sería un cambio rudimentario) es casi imposible (o al menos extremadamente difícil / con opciones muy limitadas). Así que supongo que estamos atrapados con un tamaño de fuente que hará que me quede ciego por entrecerrar los ojos, gracias Microsoft.
Brad