Tùy chỉnh mặt và kích thước phông chữ powershell


10

Chúng tôi có một số hệ thống lõi máy chủ windows 2012 với thiết lập powershell làm vỏ mặc định bằng các lệnh sau:

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

Tôi đã nhận ra rằng chúng ta có thể tùy chỉnh màu phông chữ powershell bằng một tập lệnh powershell đặc biệt tại c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1. Kịch bản này được sử dụng bởi tất cả người dùng.

Tuy nhiên, bây giờ tôi muốn tùy chỉnh mặt phông chữ và kích thước phông chữ (một lần nữa cho tất cả người dùng) vẫn tồn tại. IE Nếu tôi đăng xuất khỏi máy chủ và đăng nhập lại, tôi muốn các cài đặt được giữ lại. Tương tự như vậy nếu tôi đăng nhập với tư cách quản trị viên, hoặc quyền hạn tài khoản của tôi sẽ trông giống hệt nhau - sử dụng cùng màu phông chữ, mặt phông chữ và kích thước phông chữ.

Với Powershell ISE, dường như có thể đặt mặt phông chữ và kích thước phông chữ bằng cách sử dụng:

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

Cái gì tương đương với powershell chính nó?

Câu trả lời:


4

Powershell (không phải ISE) tận dụng "Console Host", đây là bản cập nhật hiện đại hơn một chút cho dấu nhắc lệnh MS-DOS cổ đại . Console Host là cách của Microsoft để giữ Command Prompt tương thích với các phiên bản Windows hiện đại, nhưng vẫn tương thích với các ứng dụng console cũ.

Khi bạn khởi chạy Powershell.exe, csrss.exe sẽ sinh ra một tiến trình con có tên conhost.exe. Hành vi này giống hệt như khi bạn khởi chạy Cmd.exe.

Nhưng vì họ phải duy trì khả năng tương thích với các ứng dụng bảng điều khiển cũ, họ không thể thay đổi giao diện quá nhiều, cũng như không thể thay đổi và phá vỡ một loạt các giao diện nội bộ.

Tôi sẽ không nói rằng điều đó là không thể, nhưng nó khó hơn người ta nghĩ.

Không có gì trong (Get-Host).UI.RawUI. Không có gì trong System.Consolelớp .NET.

Bạn có thể thay đổi mặt và kích thước phông chữ trong sổ đăng ký bằng cách thực hiện như sau:

(chỉnh sửa: dấu gạch dưới không gạch chéo)

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

Ngoài ra còn có một loạt các bản xuất trong kernel32.dll thay đổi phông chữ:

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);

Tôi đã cố gắng sử dụng mã ở trên để thay đổi phông chữ thông qua sổ đăng ký (nhưng dường như nó không làm gì cả). Là một cái gì đó cần thiết cho các thiết lập để có hiệu lực?
Brad

Có vẻ như các khóa đăng ký chính xác (ít nhất là cho máy chủ windows 2012) hơi khác so với Set-Location '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' và Set-Location '. \% SystemRoot% _SysWOW64_Windows Có vẻ như mã đang thực thi nhưng phông chữ của tôi không thay đổi bảng điều khiển powershell.
Brad

Sử dụng mô-đun này: gallery.technet.microsoft.com/scriptcenter/ mài Tôi đã có thể thay đổi phông chữ nhưng có vẻ như các tùy chọn rất hạn chế. Trong thực tế, các phông chữ có sẵn cho tôi cuối cùng đã bị biến dạng, quá lớn hoặc quá nhỏ. Tôi đang cố gắng tìm hiểu làm thế nào tôi có thể chọn các cỡ chữ khác nhau.
Brad

1
Đúng, người đã viết đó là PInvoking những bản xuất đó từ kernel32.dll mà tôi đang nói đến. Và có các tùy chọn là khá hạn chế. Đó là lý do tại sao khi bạn thay đổi phông chữ cho bất kỳ ứng dụng bảng điều khiển nào thông qua GUI, bạn chỉ có 3 lựa chọn phông chữ. Bạn không thể có Comic Sans trong ứng dụng bảng điều khiển của mình, bao gồm cả Powershell. Trong kịch bản của anh chàng đó, anh ta đặt phông chữ với Set-ConsoleFont 28. Mỗi số phông chữ có chiều cao và chiều rộng được xác định trước. Giống như khi bạn thay đổi nó trong GUI.
Ryan Ries

Dường như một cái gì đó đơn giản như thay đổi mặt và kích thước phông chữ (mà người ta cho là sẽ thay đổi thô sơ) là gần như không thể (hoặc ít nhất là cực kỳ khó khăn / với các tùy chọn rất hạn chế). Vì vậy, tôi đoán rằng chúng tôi bị mắc kẹt với kích thước phông chữ sẽ khiến tôi bị mù khi nheo mắt - cảm ơn Microsoft.
Brad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.