Настройка размера и размера шрифта powershell

У нас есть несколько систем Windows Server Server Core с установкой powershell в качестве оболочки по умолчанию с использованием следующих команд:

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

Я понял, что мы можем настроить цвет шрифта powershell с помощью специального скрипта powershell по адресу c:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1. Этот скрипт используется всеми пользователями.

Однако теперь я хочу настроить лицо шрифта и размер шрифта (снова для всех пользователей), который является постоянным. IE Если я выйду из сервера и снова войду в систему, я хочу сохранить настройки. Аналогичным образом, если я войду в систему как администратор или моя собственная учетная запись PowerShell должна выглядеть одинаково - используйте тот же цвет шрифта, лицо шрифта и размер шрифта.

С Powershell ISE кажется возможным установить лицо шрифта и размер шрифта, используя:

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

Что эквивалентно самой PowerShell?

1 ответ

Решение

Powershell (не ISE) использует "Console Host", который является немного более современным обновлением древней командной строки MS-DOS. Консольный хост был способом, которым Microsoft обеспечивала совместимость командной строки с современными версиями Windows, но также и со старыми консольными приложениями.

При запуске Powershell.exe csrss.exe порождает дочерний процесс conhost.exe. Это поведение идентично тому, когда вы запускаете Cmd.exe.

Но поскольку им приходилось поддерживать совместимость со старыми консольными приложениями, они не могли слишком сильно изменять внешний вид и ощущения, а также не могли менять и разрушать множество внутренних интерфейсов.

Я не собираюсь говорить, что это невозможно, но это сложнее, чем можно подумать.

Там нет ничего в (Get-Host).UI.RawUI, Там нет ничего в System.Console.NET класс.

Вы можете изменить шрифт и размер шрифта в реестре, выполнив что-то вроде этого:

(редактировать: подчеркивания, а не косые черты)

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

В kernel32.dll также есть несколько экспортов, которые меняют шрифт:

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);
Другие вопросы по тегам