自定义 powershell 字体和大小

Bra*_*rad 10 powershell font color

我们有许多 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'
Run Code Online (Sandbox Code Playgroud)

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

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

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

$psISE.Options.FontName = 'Lucida Sans Console' 
$psISE.Options.FontSize = 14
Run Code Online (Sandbox Code Playgroud)

但是,powershell 本身的等价物是什么?

Rya*_*ies 5

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
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)