自定义 powershell 字体和大小

自定义 powershell 字体和大小

我们有许多 Windows 2012 服务器核心系统,其中 powershell 设置为默认 shell,使用以下命令:

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

我发现我们可以使用位于 c:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1 的特殊 powershell 脚本自定义 powershell 字体颜色。所有用户都会使用此脚本。

但是现在我想自定义字体和字体大小(再次针对所有用户),这些是持久的。IE 如果我退出服务器并重新登录,我希望保留设置。同样,如果我以管理员身份登录,或者我自己的帐户 powershell 应该看起来相同 - 使用相同的字体颜色、字体和字体大小。

使用 Powershell ISE 似乎可以使用以下方式设置字体和字体大小:

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

但是 powershell 本身的等效物是什么呢?

答案1

Powershell(不是 ISE)利用“控制台主机”,这是对古老的MS-DOS 命令提示符。控制台主机是 Microsoft 保持命令提示符与 Windows 现代版本兼容的方式,同时仍与旧控制台应用程序兼容。

启动 Powershell.exe 时,csrss.exe 会生成一个名为 conhost.exe 的子进程。此行为与启动 Cmd.exe 时的行为相同。

但由于他们必须保持与旧控制台应用程序的兼容性,因此他们无法改变外观和感觉也不能去改变和破坏一堆内部接口。

我不是说这是不可能的,但它比人们想象的要难。

中没有任何内容(Get-Host).UI.RawUI。.NET 类中没有任何内容System.Console

您可以通过执行以下操作来更改注册表中的字体和大小:

(编辑:下划线不是斜线)

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

相关内容