Personalizzazione della faccia e delle dimensioni del carattere PowerShell


10

Abbiamo un numero di sistemi core del server Windows 2012 con configurazione PowerShell come shell predefinita usando i seguenti comandi:

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

Ho capito che possiamo personalizzare il colore del carattere PowerShell con uno script PowerShell speciale in c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1. Questo script viene utilizzato da tutti gli utenti.

Tuttavia ora voglio personalizzare il carattere e la dimensione del carattere (di nuovo per tutti gli utenti) che è persistente. IE Se esco dal server ed eseguo nuovamente l'accesso, voglio che le impostazioni vengano mantenute. Allo stesso modo, se eseguo l'accesso come amministratore o il mio account PowerShell dovrebbe apparire identico, usa lo stesso colore e la stessa dimensione.

Con Powershell ISE sembra possibile impostare la faccia e la dimensione del carattere usando:

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

Qual è l'equivalente per PowerShell stesso però?

Risposte:


4

Powershell (non ISE) sfrutta il "Console Host", che è un aggiornamento leggermente più moderno dell'antico prompt dei comandi di MS-DOS. L'host console era il modo di Microsoft di mantenere il prompt dei comandi compatibile con le versioni moderne di Windows, ma anche compatibile con le vecchie app console.

Quando si avvia Powershell.exe, csrss.exe genera un processo figlio denominato conhost.exe. Questo comportamento è identico all'avvio di Cmd.exe.

Ma dal momento che dovevano mantenere la compatibilità con le vecchie app della console, non potevano cambiare l'aspetto e sentirsi troppo , né potevano cambiare e rompere un sacco di interfacce interne.

Non dirò che è impossibile, ma è più difficile di quanto si pensi.

Non c'è niente dentro (Get-Host).UI.RawUI. Non c'è niente nella System.Consoleclasse .NET.

È possibile modificare la faccia e le dimensioni del carattere nel registro facendo una cosa del genere:

(modifica: caratteri di sottolineatura non barre)

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

Ci sono anche un sacco di esportazioni in kernel32.dll che cambiano il carattere:

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);

Ho provato a usare il codice sopra per cambiare il carattere tramite il registro (ma sembra che non abbia fatto nulla). È necessario qualcosa per rendere effettiva l'impostazione?
Brad,

Sembra che le chiavi di registro corrette (almeno per Windows Server 2012) siano Set-Location leggermente diverse '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' e Set-Location '. \% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe' e it sembra che il codice sia in esecuzione ma il mio carattere non cambia la console PowerShell.
Brad,

Utilizzando questo modulo: gallery.technet.microsoft.com/scriptcenter/… Sono stato in grado di cambiare i caratteri ma sembra che le opzioni siano molto limitate. In realtà i caratteri disponibili per me sono stati distorti, troppo grandi o troppo piccoli. Sto cercando di capire come posso selezionare caratteri di dimensioni diverse.
Brad,

1
Sì, la persona che ha scritto che sta invocando quelle esportazioni da kernel32.dll di cui stavo parlando. E sì, le opzioni sono piuttosto limitate. Ecco perché quando cambi il carattere per qualsiasi app della console attraverso la GUI, hai solo 3 scelte di caratteri. Non puoi avere Comic Sans nell'app per console, incluso Powershell. Nella sceneggiatura di quel ragazzo, sta impostando il carattere con Set-ConsoleFont 28. Ogni numero di font ha un'altezza e una larghezza predeterminate. Proprio come quando lo cambi nella GUI.
Ryan Ries,

Sembra che qualcosa di così semplice come cambiare la faccia e le dimensioni del carattere (che si potrebbe supporre sia un cambiamento rudimentale) è quasi impossibile (o almeno estremamente difficile / con opzioni molto limitate). Quindi immagino che siamo bloccati con una dimensione del carattere che mi farà diventare cieco dallo strabismo - grazie Microsoft.
Brad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.