Personnalisation du visage et de la taille de la police PowerShell

10

Nous avons un certain nombre de systèmes principaux de serveur Windows 2012 avec une configuration PowerShell comme shell par défaut à l'aide des commandes suivantes:

$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'

J'ai compris que nous pouvons personnaliser la couleur de la police PowerShell avec un script PowerShell spécial dans c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1. Ce script est utilisé par tous les utilisateurs.

Cependant, maintenant, je veux personnaliser le visage et la taille de la police (encore une fois pour tous les utilisateurs) qui sont persistants. IE Si je me déconnecte du serveur et me reconnecte, je souhaite que les paramètres soient conservés. De même, si je me connecte en tant qu'administrateur ou si mon propre compte PowerShell doit être identique - utilisez la même couleur de police, le même visage et la même taille de police.

Avec Powershell ISE, il semble possible de définir la police et la taille de la police en utilisant:

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

Quel est l'équivalent de PowerShell lui-même?

Brad
la source

Réponses:

4

Powershell (pas l'ISE) exploite l '"hôte de la console", qui est une mise à jour légèrement plus moderne de l' ancienne invite de commande MS-DOS. L'hôte de la console était la façon dont Microsoft maintenait l'invite de commande compatible avec les versions modernes de Windows, mais toujours compatible avec les anciennes applications de console.

Lorsque vous lancez Powershell.exe, csrss.exe génère un processus enfant appelé conhost.exe. Ce comportement est identique au lancement de Cmd.exe.

Mais comme ils devaient maintenir la compatibilité avec les anciennes applications de la console, ils ne pouvaient pas changer l'apparence et se sentir trop bien, ils ne pouvaient aller changer et de briser un tas d'interfaces internes.

Je ne vais pas dire que c'est impossible, mais c'est plus difficile qu'on ne le pense.

Il n'y a rien dedans (Get-Host).UI.RawUI. Il n'y a rien dans la System.Consoleclasse .NET.

Vous pouvez changer le visage et la taille de la police dans le registre en faisant quelque chose comme ceci:

(modifier: souligne pas des barres obliques)

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

Il y a aussi un tas d'exportations dans kernel32.dll qui changent la police:

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
la source
J'ai essayé d'utiliser le code ci-dessus pour changer la police via le registre (mais il ne semble rien avoir fait). Faut-il quelque chose pour que le paramètre prenne effet?
Brad
Il semble que les clés de registre correctes (au moins pour Windows Server 2012) soient légèrement différentes Set-Location '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' et Set-Location '. \% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe' et ainsi de suite semble que le code s'exécute mais ma police ne change pas la console powershell.
Brad
En utilisant ce module: gallery.technet.microsoft.com/scriptcenter/… J'ai pu changer les polices mais il semble que les options soient très limitées. En réalité, les polices à ma disposition ont fini par être déformées, trop grandes ou trop petites. J'essaie de comprendre comment je peux sélectionner différentes tailles de police.
Brad
1
Oui, la personne qui a écrit cela est PInvoquer ces exportations de kernel32.dll dont je parlais. Et oui, les options sont assez limitées. C'est pourquoi lorsque vous changez la police d'une application console via l'interface graphique, vous n'avez que 3 choix de police. Vous ne pouvez pas avoir Comic Sans dans votre application console, y compris Powershell. Dans le script de ce type, il définit la police avec Set-ConsoleFont 28. Chaque numéro de police a une hauteur et une largeur prédéterminées. Tout comme lorsque vous le modifiez dans l'interface graphique.
Ryan Ries
Il semble que quelque chose d'aussi simple que de changer le visage et la taille de la police (ce qui serait un changement rudimentaire) est presque impossible (ou du moins extrêmement difficile / avec des options très limitées). Je suppose donc que nous sommes coincés avec une taille de police qui me rendra aveugle en louchant - merci Microsoft.
Brad