我们有一些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.RawUI 。 System.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);