Anpassen der Größe und Größe von Powershell-Schriftarten

10

Wir haben eine Reihe von Windows 2012 Server Core-Systemen mit Powershell-Setup als Standard-Shell, die die folgenden Befehle verwenden:

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

Ich habe herausgefunden, dass wir die Powershell-Schriftfarbe mit einem speziellen Powershell-Skript unter c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1 anpassen können. Dieses Skript wird von allen Benutzern verwendet.

Jetzt möchte ich jedoch die Schriftart und die Schriftgröße (wieder für alle Benutzer) anpassen, die dauerhaft sind. IE Wenn ich mich vom Server abmelde und wieder anmelde, möchte ich, dass die Einstellungen beibehalten werden. Wenn ich mich als Administrator anmelde oder die Powershell meines eigenen Kontos identisch aussehen soll, verwenden Sie dieselbe Schriftfarbe, Schriftart und Schriftgröße.

Mit Powershell ISE scheint es möglich zu sein, die Schriftfläche und die Schriftgröße wie folgt einzustellen:

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

Was ist das Äquivalent für Powershell selbst?

Brad
quelle

Antworten:

4

Powershell (nicht die ISE) nutzt den "Console Host", ein etwas moderneres Update der alten MS-DOS-Eingabeaufforderung. Mit dem Konsolenhost konnte Microsoft die Eingabeaufforderung mit modernen Windows-Versionen kompatibel halten, aber auch weiterhin mit alten Konsolen-Apps.

Wenn Sie Powershell.exe starten, erzeugt csrss.exe einen untergeordneten Prozess namens conhost.exe. Dieses Verhalten ist identisch mit dem Start von Cmd.exe.

Da sie jedoch die Kompatibilität mit alten Konsolen-Apps beibehalten mussten, konnten sie weder das Erscheinungsbild zu stark ändern noch eine Reihe interner Schnittstellen ändern und beschädigen.

Ich werde nicht sagen, dass es unmöglich ist, aber es ist schwieriger als man denkt.

Da ist nichts drin (Get-Host).UI.RawUI. In der System.Console.NET-Klasse gibt es nichts .

Sie können das Schriftbild und die Schriftgröße in der Registrierung folgendermaßen ändern:

(bearbeiten: unterstreicht keine Schrägstriche)

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

Es gibt auch eine Reihe von Exporten in kernel32.dll, die die Schriftart ändern:

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
quelle
Ich habe versucht, den obigen Code zu verwenden, um die Schriftart über die Registrierung zu ändern (aber es scheint nichts getan zu haben). Ist etwas erforderlich, damit die Einstellung wirksam wird?
Brad
Die richtigen Registrierungsschlüssel (zumindest für Windows Server 2012) scheinen sich geringfügig vom Set-Location '. \% SystemRoot% _System32_WindowsPowerShell_v1.0_powershell.exe' und Set-Location '. \% SystemRoot% _SysWOW64_WindowsPowerShell_v1.0_powershell.exe zu unterscheiden Anscheinend wird der Code ausgeführt, aber meine Schriftart ändert nichts an der Powershell-Konsole.
Brad
Mit diesem Modul: gallery.technet.microsoft.com/scriptcenter/… Ich konnte die Schriftarten ändern, aber es scheint, dass die Optionen sehr begrenzt sind. Tatsächlich waren die mir zur Verfügung stehenden Schriftarten entweder verzerrt, zu groß oder zu klein. Ich versuche herauszufinden, wie ich verschiedene Schriftgrößen auswählen kann.
Brad
1
Ja, die Person, die das geschrieben hat, ruft diese Exporte von kernel32.dll auf, über die ich gesprochen habe. Und ja, die Möglichkeiten sind ziemlich begrenzt. Wenn Sie die Schriftart für eine Konsolen-App über die GUI ändern, haben Sie daher nur drei Schriftarten zur Auswahl. Sie können Comic Sans nicht in Ihrer Konsolen-App haben, einschließlich Powershell. Im Skript dieses Typen setzt er die Schriftart mit Set-ConsoleFont 28. Jede Schriftnummer hat eine vorgegebene Höhe und Breite. Genau wie beim Ändern in der GUI.
Ryan Ries
Es scheint, dass etwas so Einfaches wie das Ändern der Schriftfläche und -größe (von dem man annehmen würde, dass es sich um eine rudimentäre Änderung handelt) nahezu unmöglich ist (oder zumindest extrem schwierig / mit sehr begrenzten Optionen). Ich denke, wir haben eine Schriftgröße, die dazu führt, dass ich beim Schielen erblinde - danke an Microsoft.
Brad