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?

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.