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 本身的等價物是什麼?
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);