การปรับแต่งใบหน้าและขนาดตัวอักษรของ PowerShell


10

เรามีระบบหลักของเซิร์ฟเวอร์ windows 2012 ที่มีการติดตั้ง 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

คำตอบ:


4

Powershell (ไม่ใช่ ISE) ใช้ประโยชน์จาก "โฮสต์ของโฮสต์" ซึ่งเป็นการปรับปรุงที่ทันสมัยกว่าเล็กน้อยกับพรอมต์คำสั่ง MS-DOS โบราณ Console Host เป็นวิธีการของ Microsoft ในการทำให้ Command Prompt เข้ากันได้กับ Windows รุ่นที่ทันสมัย ​​แต่ก็ยังเข้ากันได้กับแอปคอนโซลเก่า

เมื่อคุณเปิดใช้ Powershell.exe csrss.exe จะวางกระบวนการลูกที่เรียกว่า conhost.exe ลักษณะการทำงานนี้เหมือนกับเมื่อคุณเปิด Cmd.exe

แต่เนื่องจากพวกเขาต้องรักษาความเข้ากันได้กับแอพคอนโซลเก่าพวกเขาไม่สามารถเปลี่ยนรูปลักษณ์และความรู้สึกมากเกินไปและไม่สามารถเปลี่ยนและทำลายส่วนต่อประสานภายในที่มีอยู่

ฉันจะไม่บอกว่ามันเป็นไปไม่ได้ แต่มันยากกว่าที่คิด

ไม่มีอะไร(Get-Host).UI.RawUIมา ไม่มีสิ่งใดในSystem.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) จะแตกต่างกันเล็กน้อยในการตั้งค่าตำแหน่ง '\% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' และ Set-Location '\% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe ดูเหมือนว่ารหัสกำลังดำเนินการ แต่ตัวอักษรของฉันไม่เปลี่ยนคอนโซล PowerShell
แบรด

การใช้โมดูลนี้: gallery.technet.microsoft.com/scriptcenter/…ฉันสามารถเปลี่ยนแบบอักษรได้ แต่ดูเหมือนว่าตัวเลือกมี จำกัด มาก ในความเป็นจริงแล้วแบบอักษรที่ฉันมีให้นั้นอาจถูกบิดเบือนจนเกินไปหรือเล็กเกินไป ฉันพยายามหาวิธีที่ฉันสามารถเลือกขนาดตัวอักษรที่แตกต่างกัน
แบรด

1
ใช่คนที่เขียนนั่นคือ PInvoking การส่งออกเหล่านั้นจาก kernel32.dll ฉันกำลังพูดถึง และใช่ตัวเลือกค่อนข้าง จำกัด นั่นเป็นเหตุผลที่เมื่อคุณเปลี่ยนแบบอักษรสำหรับแอพคอนโซลใด ๆ ผ่าน GUI คุณมีเพียง 3 ตัวเลือกเท่านั้น คุณไม่สามารถมี Comic Sans ในแอปคอนโซลรวมถึง Powershell Set-ConsoleFont 28ในบทของผู้ชายที่เขาตั้งค่าตัวอักษรที่มี หมายเลขแบบอักษรแต่ละตัวมีความสูงและความกว้างที่กำหนดไว้ล่วงหน้า เหมือนเมื่อคุณเปลี่ยนใน GUI
Ryan Ries

ดูเหมือนว่าบางสิ่งที่ง่ายพอ ๆ กับการเปลี่ยนรูปแบบตัวอักษรและขนาด (ซึ่งเราคิดว่าน่าจะเป็นการเปลี่ยนแปลงแบบพื้นฐาน) แทบจะเป็นไปไม่ได้เลย ดังนั้นฉันคิดว่าเราติดกับขนาดตัวอักษรที่จะทำให้ฉันตาบอดจากการเหล่ตา - ขอบคุณ Microsoft
แบรด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.