powershellフォントフェイスとサイズのカスタマイズ


10

次のコマンドを使用して、PowershellがデフォルトのシェルとしてセットアップされたWindows 2012サーバーコアシステムがいくつかあります。

$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自体に相当するものは何ですか?

回答:


4

Powershell(ISEではありません)は、「コンソールホスト」を利用します。これは、古代の MS-DOSコマンドプロンプトに対するもう少し新しいアップデートです。コンソールホストは、コマンドプロンプトを最新バージョンのWindowsと互換性を保つだけでなく、古いコンソールアプリとも互換性を保つためのMicrosoftの方法でした。

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で変更する場合と同じです。
Ryan Ries 2013年

フォントフェイスとサイズを変更する(基本的な変更であると想定される)のような単純なことはほとんど不可能(または少なくとも非常に困難/非常に限られたオプションで)のようです。だから私は私が目を細めることから盲目になるフォントサイズに行き詰まっていると思います-マイクロソフトに感謝します。
ブラッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.