Kustomisasi huruf dan ukuran font PowerShell

10

Kami memiliki sejumlah sistem inti server windows 2012 dengan pengaturan PowerShell sebagai shell default menggunakan perintah berikut:

$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'

Saya telah menemukan bahwa kita dapat menyesuaikan warna font PowerShell dengan script PowerShell khusus di c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1. Script ini digunakan oleh semua pengguna.

Namun sekarang saya ingin menyesuaikan font dan ukuran font (sekali lagi untuk semua pengguna) yang persisten. IE Jika saya keluar dari server dan masuk kembali, saya ingin pengaturan dipertahankan. Demikian juga jika saya masuk sebagai administrator, atau akun saya sendiri harus terlihat identik - gunakan warna font yang sama, font dan ukuran font yang sama.

Dengan Powershell ISE, Anda dapat mengatur ukuran dan ukuran font menggunakan:

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

Apa yang setara dengan PowerShell sendiri?

Brad
sumber

Jawaban:

4

Powershell (bukan ISE) memanfaatkan "Host Konsol," yang merupakan pembaruan yang sedikit lebih modern untuk prompt perintah MS-DOS kuno . Host Konsol adalah cara Microsoft menjaga Command Prompt kompatibel dengan versi Windows modern, tetapi juga masih kompatibel dengan aplikasi konsol lama.

Ketika Anda meluncurkan Powershell.exe, csrss.exe memunculkan proses anak yang disebut conhost.exe. Perilaku ini identik dengan ketika Anda meluncurkan Cmd.exe.

Tetapi karena mereka harus menjaga kompatibilitas dengan aplikasi konsol lama, mereka tidak dapat mengubah tampilan dan rasa terlalu banyak, juga tidak bisa mengubah dan merusak banyak antarmuka internal.

Saya tidak akan mengatakan bahwa itu tidak mungkin, tetapi itu lebih sulit daripada yang orang pikirkan.

Tidak ada apa-apa di dalamnya (Get-Host).UI.RawUI. Tidak ada apa pun di System.Consolekelas .NET.

Anda dapat mengubah wajah dan ukuran font di registri dengan melakukan sesuatu seperti ini:

(sunting: garis bawah bukan garis miring)

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

Ada juga banyak ekspor di kernel32.dll yang mengubah font:

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);
Ryan Ries
sumber
Saya mencoba menggunakan kode di atas untuk mengubah font melalui registri (tetapi tampaknya tidak melakukan apa-apa). Apakah sesuatu yang diperlukan untuk pengaturan untuk berlaku?
Brad
Sepertinya kunci registri yang benar (setidaknya untuk windows server 2012) sedikit berbeda Set-Location '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' dan Set-Location '. \% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe' dan itu sepertinya kode ini sedang dieksekusi tetapi font saya tidak mengubah konsol PowerShell.
Brad
Dengan menggunakan modul ini: gallery.technet.microsoft.com/scriptcenter/... Saya dapat mengubah font tetapi sepertinya opsi sangat terbatas. Sebenarnya font yang tersedia bagi saya akhirnya terdistorsi, terlalu besar atau terlalu kecil. Saya mencoba mencari cara bagaimana saya dapat memilih ukuran font yang berbeda.
Brad
1
Yap, orang yang menulis PInvoking ekspor dari kernel32.dll yang saya bicarakan. Dan ya pilihannya sangat terbatas. Itu sebabnya ketika Anda mengubah font untuk aplikasi konsol apa pun melalui GUI, Anda hanya memiliki 3 pilihan font. Anda tidak dapat memiliki Komik Sans di aplikasi konsol Anda, termasuk Powershell. Dalam skrip orang itu, dia mengatur font dengan Set-ConsoleFont 28. Setiap nomor font memiliki tinggi dan lebar yang telah ditentukan. Sama seperti ketika Anda mengubahnya di GUI.
Ryan Ries
Tampaknya sesuatu yang sederhana seperti mengubah wajah dan ukuran font (yang orang akan anggap sebagai perubahan mendasar) hampir tidak mungkin (atau setidaknya sangat sulit / dengan opsi yang sangat terbatas). Jadi saya kira kita terjebak dengan ukuran font yang akan menyebabkan saya menjadi buta karena menyipit - terima kasih Microsoft.
Brad