Personalizando o tamanho e o tamanho da fonte do powershell

9

Temos vários sistemas principais de servidores do Windows 2012 com a configuração do powershell como o shell padrão usando os seguintes comandos:

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

Descobri que podemos personalizar a cor da fonte powershell com um script especial do powershell em c: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ profile.ps1. Este script é usado por todos os usuários.

No entanto, agora quero personalizar a face da fonte e o tamanho da fonte (novamente para todos os usuários) que são persistentes. I.E. Se eu sair do servidor e fizer login novamente, quero que as configurações sejam mantidas. Da mesma forma, se eu fizer login como administrador, ou se o PowerShell da minha própria conta for idêntico, use a mesma cor de fonte, fonte e tamanho da fonte.

Com o Powershell ISE, parece possível definir a face da fonte e o tamanho da fonte usando:

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

Qual o equivalente para o PowerShell?

    
por Brad 23.10.2013 / 18:49

1 resposta

4

O Powershell (não o ISE) aproveita o "Console Host", que é uma atualização um pouco mais moderna para o prompt de comando do MS-DOS antigo . O Console Host era a maneira da Microsoft de manter o Prompt de Comando compatível com as versões modernas do Windows, mas também era compatível com aplicativos de console antigos.

Quando você inicia o Powershell.exe, o csrss.exe gera um processo filho chamado conhost.exe. Esse comportamento é idêntico ao quando você inicia o Cmd.exe.

Mas como eles precisavam manter a compatibilidade com os aplicativos de console antigos, eles não podiam mudar muito a aparência , nem poderiam mudar e quebrar um monte de interfaces internas.

Eu não vou dizer que é impossível, mas é mais difícil do que se pensa.

Não há nada em (Get-Host).UI.RawUI . Não há nada na classe System.Console .NET.

Você pode alterar a face e o tamanho da fonte no registro fazendo algo parecido com isto:

(editar: sublinhados e não barras)

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

Há também um monte de exportações no kernel32.dll que mudam a fonte:

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);
    
por 23.10.2013 / 20:13