Powershell

自定義 powershell 字型和大小

  • October 23, 2013

我們有許多 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 本身的等價物是什麼?

Powershell(不是 ISE)利用“控制台主機”,它是對古老的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);

引用自:https://serverfault.com/questions/548103