自定义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' 

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

但是现在我想定制永久性的字体和字体大小(对于所有用户来说)。 IE如果我退出服务器并重新login,我想保留设置。 同样,如果我以pipe理员身份login,或我自己的帐户PowerShell应该看起来相同 – 使用相同的字体颜色,字体和字体大小。

使用Powershell ISE,似乎可以使用以下命令来设置字体和字号:

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

什么是PowerShell本身虽然相当于?

Powershell(而不是ISE)利用“控制台主机”,这是对古老的 MS-DOS命令提示符稍微更现代的更新。 控制台主机是微软保持命令提示符与现代版本的Windows兼容的方式,但也与旧的控制台应用程序兼容。

当您启动Powershell.exe时,csrss.exe产生一个名为conhost.exe的subprocess。 此行为与启动Cmd.exe时相同。

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

我不会说这是不可能的,但比想象的更难。

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

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

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

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