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

10

У нас есть несколько систем 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?

штифтик
источник

Ответы:

4

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);
Райан Райс
источник
Я попытался использовать приведенный выше код для изменения шрифта через реестр (но, похоже, он ничего не сделал). Требуется ли что-то, чтобы настройки вступили в силу?
Брэд
Похоже, что правильные ключи реестра (по крайней мере для Windows Server 2012) немного отличаются от Set-Location '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' и Set-Location '. \% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe' и Кажется, что код выполняется, но мой шрифт не меняет консоль PowerShell.
Брэд
Используя этот модуль: gallery.technet.microsoft.com/scriptcenter/… Мне удалось изменить шрифты, но, похоже, варианты очень ограничены. В действительности доступные мне шрифты либо оказывались искаженными, либо слишком большими, либо слишком маленькими. Я пытаюсь понять, как я могу выбрать разные размеры шрифта.
Брэд
1
Да, человек, который написал это, вызывает те экспорты из kernel32.dll, о которых я говорил. И да, варианты довольно ограничены. Вот почему, когда вы изменяете шрифт для любого консольного приложения через графический интерфейс, у вас есть только 3 варианта шрифта. Вы не можете использовать Comic Sans в своем консольном приложении, включая Powershell. В сценарии этого парня он устанавливает шрифт с помощью Set-ConsoleFont 28. Каждый номер шрифта имеет предопределенную высоту и ширину. Так же, как когда вы меняете его в графическом интерфейсе.
Райан Райс
Кажется, что что-то столь же простое, как изменение шрифта и размера шрифта (что можно было бы считать рудиментарным изменением), практически невозможно (или, по крайней мере, чрезвычайно сложно / с очень ограниченными возможностями). Поэтому я думаю, что мы застряли с размером шрифта, который заставит меня ослепнуть от косоглазия - спасибо Microsoft.
Брэд