Dostosowywanie czcionki i rozmiaru czcionki PowerShell

10

Mamy wiele podstawowych systemów Windows Server z konfiguracją PowerShell jako domyślną powłoką za pomocą następujących poleceń:

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

Doszedłem do wniosku, że możemy dostosować kolor czcionki PowerShell za pomocą specjalnego skryptu PowerShell na c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1. Ten skrypt jest używany przez wszystkich użytkowników.

Jednak teraz chcę dostosować trwałą czcionkę i rozmiar czcionki (ponownie dla wszystkich użytkowników). IE Jeśli wyloguję się z serwera i zaloguję ponownie, chcę zachować ustawienia. Podobnie, jeśli zaloguję się jako administrator lub mój własny PowerShell konta powinien wyglądać identycznie - użyj tego samego koloru czcionki, twarzy i rozmiaru czcionki.

Z Powershell ISE wydaje się, że można ustawić czcionkę i rozmiar czcionki za pomocą:

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

Jaki jest jednak odpowiednik samego PowerShell?

Ćwiek
źródło

Odpowiedzi:

4

Program Powershell (nie ISE) wykorzystuje „Host konsoli”, który jest nieco bardziej nowoczesną aktualizacją starożytnego wiersza polecenia MS-DOS. Host konsoli był sposobem firmy Microsoft na utrzymanie wiersza polecenia zgodnego z nowoczesnymi wersjami systemu Windows, ale także zgodnego ze starymi aplikacjami konsolowymi.

Po uruchomieniu Powershell.exe, csrss.exe spawnuje proces potomny o nazwie conhost.exe. To zachowanie jest identyczne z uruchomieniem Cmd.exe.

Ale ponieważ musieli zachować kompatybilność ze starymi aplikacjami konsolowymi, nie mogli zmienić wyglądu i poczuć się zbytnio , ani nie mogli zmienić i złamać szeregu wewnętrznych interfejsów.

Nie powiem, że to niemożliwe, ale trudniejsze niż mogłoby się wydawać.

Nic nie ma (Get-Host).UI.RawUI. Nic nie ma w System.Consoleklasie .NET.

Możesz zmienić twarz i rozmiar czcionki w rejestrze, wykonując coś takiego:

(edycja: podkreślenia nie są ukośnikami)

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

W kernel32.dll znajduje się także kilka eksportów, które zmieniają czcionkę:

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
źródło
Próbowałem użyć powyższego kodu, aby zmienić czcionkę za pośrednictwem rejestru (ale wydaje się, że nic nie zrobiło). Czy coś jest wymagane, aby ustawienie zadziałało?
Brad
Wygląda na to, że poprawne klucze rejestru (przynajmniej dla Windows Server 2012) są nieco inne Set-Location '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' i Set-Location '. \% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe' i to wygląda na to, że kod się wykonuje, ale moja czcionka nie zmienia konsoli PowerShell.
Brad
Korzystając z tego modułu: gallery.technet.microsoft.com/scriptcenter/… Mogłem zmienić czcionki, ale wydaje się, że opcje są bardzo ograniczone. W rzeczywistości dostępne dla mnie czcionki były zniekształcone, za duże lub za małe. Próbuję dowiedzieć się, jak wybrać różne rozmiary czcionek.
Brad
1
Tak, osoba, która napisała, że ​​to PInvoking tych eksportów z kernel32.dll, o którym mówiłem. I tak, opcje są dość ograniczone. Dlatego zmieniając czcionkę dla dowolnej aplikacji konsoli za pomocą GUI, masz tylko 3 możliwości wyboru czcionki. Nie możesz mieć Comic Sans w aplikacji na konsolę, w tym w PowerShell. W skrypcie tego faceta ustawia czcionkę Set-ConsoleFont 28. Każdy numer czcionki ma określoną wysokość i szerokość. Podobnie jak po zmianie w GUI.
Ryan Ries
Wydaje się, że coś tak prostego, jak zmiana wyglądu i rozmiaru czcionki (co można by założyć, że byłaby podstawową zmianą) jest prawie niemożliwe (lub przynajmniej niezwykle trudne / z bardzo ograniczonymi opcjami). Sądzę więc, że utknęliśmy z czcionką, która sprawi, że stracę wzrok ze zmrużenia oka - dzięki Microsoft.
Brad