自定义Powershell字体和大小


10

我们有许多Windows 2012 Server核心系统,使用以下命令将powershell设置为默认外壳:

$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脚本自定义powershell字体颜色,该脚本位于c:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1。该脚本被所有用户使用。

但是,现在我想自定义持久的字体和字体大小(再次针对所有用户)。IE如果我注销服务器并重新登录,则希望保留设置。同样,如果我以管理员身份登录,或者我自己的帐户Powershell应该看起来相同,请使用相同的字体颜色,字体和字体大小。

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

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

但是,PowerShell本身的等效功能是什么?

Answers:


4

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

启动Powershell.exe时,csrss.exe会生成一个名为conhost.exe的子进程。此行为与启动Cmd.exe时相同。

但是,因为他们不得不保持与旧的控制台应用程序的兼容性,他们无法改变它的外表和感觉太多太多,他们也可以去改变,打破了一堆的内部接口。

我不会说这是不可能的,但是这比人们想像的要难。

中没有任何内容(Get-Host).UI.RawUISystem.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);

我尝试使用上面的代码通过注册表更改字体(但似乎没有做任何事情)。设置生效需要一些东西吗?
布拉德

似乎正确的注册表项(至少对于Windows Server 2012而言)与Set-Location'。\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe'和Set-Location'。\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe'稍有不同似乎代码正在执行,但是我的字体没有更改Powershell控制台。
布拉德

使用此模块:gallery.technet.microsoft.com/scriptcenter/…我能够更改字体,但似乎选项非常有限。实际上,可供我使用的字体最终会失真,太大或太小。我试图弄清楚如何选择不同的字体大小。
布拉德

1
是的,写这个的人正在调用我正在谈论的来自kernel32.dll的那些导出。是的,选择非常有限。这就是为什么当您通过GUI更改任何控制台应用程序的字体时,只有3种字体选择。您的控制台应用程序(包括Powershell)中不能包含Comic Sans。在那个家伙的脚本中,他使用设置字体Set-ConsoleFont 28。每个字体号具有预定的高度和宽度。就像在GUI中进行更改一样。
瑞安·里斯

看起来像更改字体的外观和大小(可能会认为是基本的更改)这样简单的事情几乎是不可能的(或者至少极其困难/选项非常有限)。因此,我想我们使用的字体大小会卡住,这会使我对斜视视而不见-感谢Microsoft。
布拉德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.