Назад | Перейти на главную страницу

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

У нас есть несколько систем ядра сервера Windows 2012 с настройкой 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. Этот сценарий используется всеми пользователями.

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

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

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

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

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