Terminal: Windows 10 1809 / 19H1 / 20H1破坏了Powershell的控制台设置。 继续使用栅格字体。

创建于 2018-10-11  ·  87评论  ·  资料来源: microsoft/terminal

Windows 10 1809破坏了Powershell的控制台设置。 Powershell会继续使用光栅字体。 您可以更改设置并查看结果,但是当您再次打开设置(有或没有关闭它们之间的powershell)时,该字体已重置为12号光栅字体。

编辑:从1803年升级。德语语言环境。

https://aka.ms/AA37kk1

Area-Fonts Issue-Bug Product-Powershell

最有用的评论

仅当使用Consolas字体时,对我也是如此。 如果我使用其他任何东西-Courier New,Lucida Console等-设置将保留。

所有87条评论

仅当使用Consolas字体时,对我也是如此。 如果我使用其他任何东西-Courier New,Lucida Console等-设置将保留。

@ 50Wliu我可以确认该行为。 Consolas重置为栅格字体。 Lucida Console保留为Lucida Console。

我几乎可以肯定这与以下事实有关:新版本的PSReadline使用UTF8代码页显示其提示,并且当这样做时,控制台将尝试重新计算字体。

我以为我们以前跟踪过此问题,但似乎找不到它们。 @bitcrazed您还记得他们在哪里吗? 还是使用@lzybkr和@ SteveL-MSFT作为内部邮件线程?

有人可以提供准确的复制品吗? 就像您为快捷方式设置的字体一样。 设置为什么字体?

  • Win-R并运行powershell
  • 它以光栅字体开始。
  • 进入设置并将字体设置为Consolas。 单击确定。
  • 正在应用Consolas。
  • 关闭Powershell。
  • 像以前一样重新打开powershell。
  • 字体再次是光栅字体。
  • 进入默认设置,并将字体设置为Consolas。 单击确定。
  • 关闭Powershell。
  • 像以前一样重新打开powershell。
  • 字体再次是光栅字体。

我认为这甚至不是Powershell的错。 我在这里有条便条,一个最新的.NET Frameworks(4.7something)突然决定使用65001作为所有应用程序的默认代码页,并且当它们在启动和启动时与其他工具和代码页来回切换时,退出,我们重新计算字体。

我有一个bug试图减轻这种痛苦,但是实际上是代码页之间的突然翻转才使这成为一个问题。

我在这里无法重现。 Windows PowerShell和Powershell都以我设置的字体启动。

@Borkason您尝试过concfg clean
https://github.com/lukesampson/concfg

@borakson -Windows配置为使用什么语言环境?

@bitcrazed我不是@Borkason,但由于遇到此问题,我也会回答。

我的显示语言是西班牙语(西班牙),我的区域格式也是。 不支持Unicode的程序的语言是英语(美国),我为UTF-8 Unicode选择了beta复选框。 (希望这就是您想要的...让我知道您是否在要求其他东西)

@bitcrazed德语。 我从1803年升级。忘记了这个意思。

@doctordns哪种字体?

@doctordns哪种字体?

我使用Lucida Console(18 pt)。 但是我已经测试了其他人,并且在Windows PowerShell重新启动后它们也可以工作。

仅当使用Consolas字体时,对我也是如此。 如果我使用其他任何东西-Courier New,Lucida Console等-设置将保留。

这可能是由@lzybkr的最新工作解决的: https :

@Borkason@doctordns-如果确定,您可以确认并关闭吗?

谢谢。

@bitcrazed看来您引用的问题早在2017年已修复,据我所知,它包含在1809附带的PSReadLine版本中。 此外,从Windows Insiders内部版本18277开始,对于我来说,此问题仍在发生。

@bitcrazed那比1809版本要早一年。 我不会称其为“最近的”。

对我来说,什么都没有改变。 我在Windows 10内部版本17763.107

> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

但是正如@ 50Wliu已经说过的那样,它在当前预览中甚至还没有修复。

这是反馈的链接: https :

@bitcrazed链接到导致问题的问题。

修复程序在此PR中: https :

很公平。 是否知道该修复程序将以什么版本发布?

我将在年底之前尝试发布PowerShell画廊的另一个Beta,但是我不了解Windows(我无法在Windows上运行)。

@ SteveL-MSFT拥有Windows中附带的位,因此也许他可以发表评论。

名称值
---- -----
PS版本5.1.17763.134
PSEdition桌面
PSCompatibleVersions {1.0、2.0、3.0、4.0 ...}
生成版本10.0.17763.134
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
序列化版本1.1.0.1

同样在这里...准备重新安装Windows,真的很痛苦!

此问题似乎链接到字体。 当我将字体设置为“控制台”时,我在Windows的Powershell中遇到了问题(cmd和Powershell核心没有此问题),但是当我将字体更改为“ Sarasa Mono SC”时,它们都可以正常工作。 我使用'Sarasa Mono SC'显示UTF-8字符,Windows 10没有默认字体可以显示足够的UTF-8字符。

同样在这里。 我的Surface和台式机均如此。

奇怪的是,我认为我正在经历同样的问题,但是方式不同。 每当打开子进程来运行powershell.exe时,控制台字体就会从Consolas更改为栅格。

示例1:我正在运行vim(WSL),它运行powershell子命令来获取系统剪贴板。 每次我运行该命令时,它都会将控制台字体重置为光栅字体。

示例2:我有一个shell脚本,该脚本将powershell作为子进程运行,以获取系统名称服务器。 它会导致控制台发生相同的事情,切换到光栅字体。 什么都没有输出到控制台。 一切都发生在子流程中。

真正奇怪的是,如果我从控制台(WSL)手动运行powershell,那很好,字体也不会改变。

@ bitcrazed ,@ SteveL-MSFT,@ lzybkr :我有一个很好的最小

  1. 设置以下注册表项(另存为.reg和import)。 由于某些原因,更改FontFamily非常重要,因为默认值可能有所不同,并且不会应用该字体。
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Console]
"FaceName"="Consolas"
"FontFamily"=dword:00000036
"FontSize"=dword:000f0000
"FontWeight"=dword:00000190
"CodePage"=dword:0000fde9
  1. Win + R cmd.exe ENTER键。 控制台以正确的字体和代码页开始。 输入chcp ; 它会打印65001(如果没有,请运行chcp 65001 )。
  2. 在控制台中,键入powershell -noprof ('-noprof'确认问题与我在个人资料中加载的内容无关)。

在PowerShell启动时,控制台字体会立即更改为栅格字体,并且窗口会调整大小以适应。 所选的光栅字体为Terminal,甚至没有WGL4字符(没有西里尔字母或希腊语)。 因此,这肯定是一个错误。

即使运行非交互式命令,该行为也会重现,因此,该错误与PSReadLine有关非常值得怀疑:

powershell -noprof -nonint -command "echo foo"

另外,如果通过快捷方式,从Win + R对话框或双击资源管理器运行PowerShell,则控制台字体的更改类似(本质上,控制台以光栅字体打开)。

另外,还有一些负面因素。 如果出现以下情况,则不会更改字体:

  • 我从cmd调用powershell之前运行chcp 437
  • 控制台字体在注册表中设置为“ Lucida Console”(其他都与上面相同)。 该票证的注释中已经指出该字体某种程度上是“特殊”字体。

我相信,本期评论中的共同主题是非美国的欧洲语言环境(提到了德语和西班牙语)。 所以我尝试了以下方法:

  1. 启动cmd.exe
  2. 使用chcp NNN设置控制台代码页(如下所示):
  3. 运行powershell -noprof
  • 使用NNN = 437、1252、1251、1253、850、852、869、857、737-无需更改字体
  • 如果NNN = 65001、858和非WGL4希伯来语862,阿拉伯语864,则字体会更改。

是什么让CP 858与众不同? 我的猜测是这可能是关键。 CP名称为“ OEM多语言拉丁语1 +欧元符号”。

同样值得注意的是,即使在cmd.exe中chcp 1255chcp 1266 (希伯来语和阿拉伯语)也将字体更改为“ Courier New”。 因此,PowerShell可能只在某种程度上更容易受到攻击,而不是主要的罪魁祸首?

强制版本信息:

C:\Users\kkm> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17763.134
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.134
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

另外,我应该提一下,尽管这很可能无关紧要:我有一个高DPI显示器,其显示比例设置为150%。

@ kkm000此问题已在PSReadLine(https://github.com/lzybkr/PSReadLine/pull/771)中修复,但不在所使用的Windows版本中,尽管已将修复程序检入到较新的Windows版本中。 我相信PSReadLine的最新公共Beta版已修复,因此您可以使用以下方法将其安装在Windows PowerShell中:

install-module psreadline -AllowPrerelease -Repository PSGallery -Force
# restart PowerShell to load the new one

如果它抱怨找不到-AllowPrerelease则必须更新PowerShellGet:

install-module powershellget -Scope CurrentUser -Repository psgallery -Force -AllowClobber
# restart PowerShell to load the new one

尽管已将修复程序检入到较新版本的Windows中。

这是否意味着该修复程序将在将来的(19H1)Insiders版本中发布?

@ 50Wliu是的

@ SteveL-MSFT我有与@ kkm000相同的版本,我运行了命令但对我不起作用,我错过了一些东西吗?

@ SteveL-MSFT我感到非常失望,因为它不能与常规Windows Update一起提供。 如果Microsoft通过更新破坏了某些内容,则他们有责任修复更新而不将其推迟六个月以上,并计划将其与下一个Windows版本一起发布,或者让人们跳过箍以从安装版本获得修补程序。

所以...。我不得不多次运行该命令

安装模块powershellget -Scope CurrentUser-存储库psgallery -Force -AllowClobber

在以管理员身份运行powershell的情况下,taskmgr杀死powershell,然后再次执行此操作,因为它失败了两次或三次。 而且……看起来像在工作! $ PROFILE中的自定义显示设置现在的行为与升级前相同。

从以前的1809累积更新升级到最新的1809 17763.292版本之后,这才刚刚开始发生在我身上。 我按照说明安装了新的PSReadLine,它似乎在那里:

Script 2.0.0 PSReadLine {Get-PSReadLineKeyHandler, Set-PSReadLineKeyHandler, Remov
我有

PSVersion 5.1.17763.134

Consolas字体被替换为光栅字体。

更新

这似乎是由不稳定的修复。 现在,重新启动后,无论运行级别如何,该修补程序都将保持/运行。


我现在看到的有趣行为。 在笔记本电脑上运行“修复程序”后
名称值
---- -----
PS版本5.1.17763.134
PSEdition桌面
PSCompatibleVersions {1.0、2.0、3.0、4.0 ...}
生成版本10.0.17763.134
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
序列化版本1.1.0.1

在用户模式下运行PS时,修复很好; 当以管理员身份运行PS时,修复不起作用。

即使在用户模式下也对我不起作用。

@ SteveL-MSFT,看来该修复程序不适用于我。 另外,似乎安装模块没有更改任何内容。 我已经有了一个最新的PowerShellGet( -AllowPrerelease当然可以;我的键绑定取决于最近的PSReadLine)。 我最初是几个月前安装PSReadLine的(在升级Windows之前!),所以我希望今天能通过您建议的命令进行升级,但是我不知道如何确认是否确实有任何更改。 能否请你帮忙? 在尝试升级之前,我选择了PSReadLine版本:

C:\WINDOWS\system32> date

Saturday, February 2, 2019 13:46:02

C:\WINDOWS\system32> Get-Module PSReadline | fl Version

Version : 2.0.0

C:\WINDOWS\system32> Get-Module PSReadline | fl *

LogPipelineExecutionDetails : False
Name                        : PSReadline
Path                        : C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0\PSReadLine.psm1
ImplementingAssembly        :
Definition                  : function PSConsoleHostReadLine
                              {
                                  Microsoft.PowerShell.Core\Set-StrictMode -Off
                                  [Microsoft.PowerShell.PSConsoleReadLine]::ReadLine($host.Runspace, $ExecutionContext)
                              }

Description                 : Great command line editing in the PowerShell console host
Guid                        : 5714753b-2afd-4492-a5fd-01d9e2cff8b5
HelpInfoUri                 : https://go.microsoft.com/fwlink/?LinkId=528806
ModuleBase                  : C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0
PrivateData                 : {PSData}
Tags                        : {}
ProjectUri                  :
IconUri                     :
LicenseUri                  :
ReleaseNotes                :
RepositorySourceLocation    : https://www.powershellgallery.com/api/v2/
Version                     : 2.0.0
ModuleType                  : Script
Author                      : Microsoft Corporation
AccessMode                  : ReadWrite
ClrVersion                  : 4.0.0
CompanyName                 : Microsoft Corporation
Copyright                   : (c) Microsoft Corporation. All rights reserved.
DotNetFrameworkVersion      : 4.6.1
ExportedFunctions           : {[PSConsoleHostReadLine, PSConsoleHostReadLine]}
Prefix                      :
ExportedCmdlets             : {[Get-PSReadLineKeyHandler, Get-PSReadLineKeyHandler], [Get-PSReadLineOption,
                              Get-PSReadLineOption], [Remove-PSReadLineKeyHandler, Remove-PSReadLineKeyHandler],
                              [Set-PSReadLineKeyHandler, Set-PSReadLineKeyHandler]...}
ExportedCommands            : {[Get-PSReadLineKeyHandler, Get-PSReadLineKeyHandler], [Get-PSReadLineOption,
                              Get-PSReadLineOption], [Remove-PSReadLineKeyHandler, Remove-PSReadLineKeyHandler],
                              [Set-PSReadLineKeyHandler, Set-PSReadLineKeyHandler]...}
FileList                    : {}
CompatiblePSEditions        : {}
ModuleList                  : {}
NestedModules               : {Microsoft.PowerShell.PSReadLine}
PowerShellHostName          :
PowerShellHostVersion       :
PowerShellVersion           : 5.0
ProcessorArchitecture       : None
Scripts                     : {}
RequiredAssemblies          : {}
RequiredModules             : {}
RootModule                  : PSReadLine.psm1
ExportedVariables           : {}
ExportedAliases             : {}
ExportedWorkflows           : {}
ExportedDscResources        : {}
SessionState                : System.Management.Automation.SessionState
OnRemove                    :
ExportedFormatFiles         : {C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0\PSReadLine.format.ps1xml}
ExportedTypeFiles           : {}

然后我按照您的建议进行了升级:

C:\WINDOWS\system32> install-module psreadline -AllowPrerelease -Repository PSGallery -Force
C:\WINDOWS\system32> exit

Install-Module搅拌了一段时间,屏幕顶部出现了带有'o'刺痛的进度条。 我认为这没有任何意义,但是重复安装模块也会导致进度条出现一会儿。 但是新控制台仍然遭受原始问题的困扰。 另外,我在这里看不到任何变化,也许您可​​以发现一些东西? 我当然可以查看自己拥有的文件版本等,但我只是不知道要查找什么。

这也没有做任何事情:

C:\WINDOWS\system32> Update-Module PSReadLine -AllowPrerelease
C:\WINDOWS\system32>

在新控制台中,new(?)PSReadLine似乎相同:

C:\WINDOWS\system32> Get-Module PSReadline | fl *

LogPipelineExecutionDetails : False
Name                        : PSReadline
Path                        : C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0\PSReadLine.psm1
ImplementingAssembly        :
Definition                  : function PSConsoleHostReadLine
                              {
                                  Microsoft.PowerShell.Core\Set-StrictMode -Off
                                  [Microsoft.PowerShell.PSConsoleReadLine]::ReadLine($host.Runspace, $ExecutionContext)
                              }

Description                 : Great command line editing in the PowerShell console host
Guid                        : 5714753b-2afd-4492-a5fd-01d9e2cff8b5
HelpInfoUri                 : https://go.microsoft.com/fwlink/?LinkId=528806
ModuleBase                  : C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0
PrivateData                 : {PSData}
Tags                        : {}
ProjectUri                  :
IconUri                     :
LicenseUri                  :
ReleaseNotes                :
RepositorySourceLocation    : https://www.powershellgallery.com/api/v2/
Version                     : 2.0.0
ModuleType                  : Script
Author                      : Microsoft Corporation
AccessMode                  : ReadWrite
ClrVersion                  : 4.0.0
CompanyName                 : Microsoft Corporation
Copyright                   : (c) Microsoft Corporation. All rights reserved.
DotNetFrameworkVersion      : 4.6.1
ExportedFunctions           : {[PSConsoleHostReadLine, PSConsoleHostReadLine]}
Prefix                      :
ExportedCmdlets             : {[Get-PSReadLineKeyHandler, Get-PSReadLineKeyHandler], [Get-PSReadLineOption,
                              Get-PSReadLineOption], [Remove-PSReadLineKeyHandler, Remove-PSReadLineKeyHandler],
                              [Set-PSReadLineKeyHandler, Set-PSReadLineKeyHandler]...}
ExportedCommands            : {[Get-PSReadLineKeyHandler, Get-PSReadLineKeyHandler], [Get-PSReadLineOption,
                              Get-PSReadLineOption], [Remove-PSReadLineKeyHandler, Remove-PSReadLineKeyHandler],
                              [Set-PSReadLineKeyHandler, Set-PSReadLineKeyHandler]...}
FileList                    : {}
CompatiblePSEditions        : {}
ModuleList                  : {}
NestedModules               : {Microsoft.PowerShell.PSReadLine}
PowerShellHostName          :
PowerShellHostVersion       :
PowerShellVersion           : 5.0
ProcessorArchitecture       : None
Scripts                     : {}
RequiredAssemblies          : {}
RequiredModules             : {}
RootModule                  : PSReadLine.psm1
ExportedVariables           : {}
ExportedAliases             : {}
ExportedWorkflows           : {}
ExportedDscResources        : {}
SessionState                : System.Management.Automation.SessionState
OnRemove                    :
ExportedFormatFiles         : {C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0\PSReadLine.format.ps1xml}
ExportedTypeFiles           : {}

另外,由于上面的@ mjoyce6500@wigster注释,我检查了用户(非管理员)控制台,它也显示了以前的错误。

请,我会很感激您可能会分享的任何帮助/想法!

@ SteveL-MSFT,@ lzybkr ,我认为

C:\WINDOWS\system32> Find-Module PSReadline -Repository PSGallery -AllVersions -AllowPrerelease | ft name,ver*,pub*

Name       Version     PublishedDate
----       -------     -------------
PSReadLine 2.0.0-beta3 2018-09-04 21:59:13
PSReadLine 2.0.0-beta2 2018-06-04 20:28:42
PSReadLine 2.0.0-beta1 2017-12-06 07:22:16
PSReadLine 1.2         2016-01-25 20:43:22
PSReadLine 1.0.0.13    2015-02-18 00:28:18
PSReadLine 1.0.0.12    2014-08-26 19:04:26
PSReadLine 1.0.0.11    2014-06-13 21:15:30
PSReadLine 1.0.0.10    2014-06-13 02:21:13
PSReadLine 1.0.0.9     2014-06-11 21:20:46
PSReadLine 1.0.0.8     2014-05-07 22:20:52

不幸的是,它不再像beta2那样包含ReleaseNotes。 但是时间肯定排除了这种可能性。

不相关的注释,作者和公司显然已互换:

C:\WINDOWS\system32> Find-Module PSReadline -req 2.0.0-beta3 -Repository PSGallery -AllowPrerelease | fl author,compan*

Author      : Microsoft Corporation
CompanyName : lzybkr

“修复”对我来说仍然有好坏参半的结果。 用户模式下的Powershell运行正常,运行上述命令后未更改我的自定义颜色/字体。 尽管“管理模式”下的Powershell尚未修复,但显示了此错误中指出的行为。

@ mjoyce6500您能给我确切的

@ SteveL-MSFT,您能看看我上面的评论吗? 我什至无法在PSGallery中找到PSReadLine的更新版本,而其他人则报告“混合结果”。 截至目前,可用的最高版本仍是PSReadLine 2.0.0-beta3 18-09-04 21:59:13 ,该版本在修订合并之前一个月发布。

另外,如何找到我使用的版本? 在我从未尝试过更新建议的另一台计算机上,从已安装的程序包中检查文件Changes.txt的第一行:

C:\WINDOWS\system32> Get-Module PSReadline | fl version,modulebase

Version    : 2.0.0
ModuleBase : C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0

C:\WINDOWS\system32> gc "C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0\Changes.txt" | select -first 1
### Version 2.0.0-beta2

然后,Install-Module确实尝试安装2.0.0-beta3,通过在没有-force情况下运行进行确认:

C:\WINDOWS\system32> install-module psreadline -AllowPrerelease -Repository PSGallery
WARNING: Version '2.0.0-beta2' of module 'PSReadline' is already installed at 'C:\Program
Files\WindowsPowerShell\Modules\PSReadline\2.0.0'. To install version '2.0.0-beta3', run Install-Module and add the -Force parameter, this command will install version '2.0.0-beta3' side-by-side with version '2.0.0-beta2'.

我是否有可能不是从别人那里得到更新的?

更新后,Changes.txt具有2.0.0-beta3标头作为第一行:

C:\WINDOWS\system32> gc "C:\Program Files\WindowsPowerShell\Modules\PSReadline\2.0.0\Changes.txt" | select -first 1
### Version 2.0.0-beta3

和以前一样的复制,是否需要管理控制台。 从使用Consolas字体的cmd.exe控制台中:

C:\WINDOWS\system32>chcp 65001
Active code page: 65001

C:\WINDOWS\system32>powershell -noprof -nonint
==== BOOM! font changes ===
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\WINDOWS\system32>

当然,我不希望它起作用,因为我没有更新的DLL。 我的问题是,其他人怎么可能拥有它。

在这里有相同的问题,并且上面的修复无效。

鉴于此修复程序从未发布过,所以从这双眼睛后面看,仍然令人难以置信。 说我不知所措,什么也没说。 我目前的想法是有两个PS画廊,并且已将修复程序发布到其中只有少数几个人可以访问的其中一个。

@ kkm000有一个PSGallery,而beta.3是最新发布的PSReadLine。 Win10中随附的PSReadLine 2.0.0版本是PSReadLine 2.0.0的分支,并进行了一些较新的特定修复,因此从某种意义上说,它领先于PSGallery上发布的版本。

@ SteveL-MSFT
我安装了beta3,没有任何解决。
Windows 1809和1903(Build 18334.1)

@Borkason如果不使用栅格字体,则不更改字体的修补程序应该已经在该版本中。 您使用什么字体?

我正在使用Consolas。 每次重新启动PowerShell后,它都会切换回去。

@Borkason您使用的是什么语言环境? 美国还是其他?

去DE

现在突然工作了。 让我喜欢关闭和打开Powershell的10次,但现在看来还是坚持了。

它又坏了。 因此,显然,它是随机决定再次中断还是起作用。 💢

我发生在18334年-完全是随机的。 没再发生了。

好的,所以区别是当我通过ALT-R运行powershell时,字体保持不变。 当我从开始菜单运行它时,即使我在从开始菜单运行的上一个会话中将其更改为consolas,它也会将字体重置为光栅。

(实际上,通过开始菜单,我的意思是我按下键盘上的Windows键,然后键入'powershell',然后按Enter。)

@ SteveL-MSFT-我尚未发布具有PowerShell画廊字体修复的版本。 该修补程序可在PSReadLine存储库中找到,因此您可以自己构建它或从AppVeyor获取构建。

@Borkason-如果您使用的是Consolas那么我认为您应该不会看到字体错误。

由于向后兼容,仍然很难设置控制台默认值。 可以在注册表(每个控制台应用程序)或用于启动控制台应用程序的快捷方式中设置默认值。 我知道控制台团队想解决这个问题,但这显然是一个难题。

如果您使用的是Consolas那么我认为您应该不会看到字体错误。

然后此错误无法解决,因为我使用的是Consolas,而快捷方式也可以。

grafik
grafik

由于向后兼容,仍然很难设置控制台默认值。

然后,Microsoft应该为那些只希望其控制台再次运行的用户提供脚本/ FixIt工具,而不考虑向后兼容性。

我知道控制台团队想解决这个问题,但这显然是一个难题。

显然。 而且,将该死的PowerShell半修补程序放到1809年,更不用说1903年了,这也很困难。

😠

我刚刚更新到18342,这个问题似乎已经解决(18334每次仍然重置为光栅字体)。

我仍然同意将修正案回溯到1809年。

编辑:升级时配置错误(请参阅https://github.com/Microsoft/console/issues/280#issuecomment-474917761)。 该错误仍未修复。

我刚刚重新安装了20H1。 问题仍然存在。 is这是个玩笑吧?

可以通过安装1809 Windows 10 Rsat工具来解决此问题。
您不能在运行Windows Home或Standard版本的计算机上安装RSAT。
您只能在Windows 10专业版或企业版上安装RSAT。

方法1 –使用添加功能在Windows 10 1809版上安装RSAT工具

要在Windows 10版本1809上安装RSAT工具,请单击“开始”。 单击设置,然后从设置页面中,单击应用。
在右窗格的“应用程序和功能”下,单击“管理可选功能”。
现在单击+添加功能。等待要填充的功能列表。
向下滚动,直到看到RSAT功能。
现在,选择要安装的任何RSAT功能。 在这种情况下,我选择了RSAT:组策略管理工具功能。
单击安装。
单击后退图标,然后等待功能安装完成。
现在,您应该在开始> Windows管理工具下找到组策略管理工具。

工程位于...。在Windows 10 1809版和更高版本上安装RSAT工具
通过Prajwal Desai更新于2019年1月31日

希望这可以帮助....

@RobRoberson你真的很明白你在说什么,对吗?

我在Windows 1809 17763.316上遇到了相同的问题。
zh_Hans_CN,启用了UTF-8选项。

预览版本是否可以解决问题?

预览版本是否可以解决问题?

没有。

我收回了我在https://github.com/Microsoft/console/issues/280#issuecomment -465837677中所说的内容。 实际发生的是我的所有语言设置都被重置,从而关闭了65001代码页。 我刚刚意识到今天已将其重新打开,并...您好,光栅字体。

@ SteveL-MSFT您的评论似乎不正确,尽管仍有人说这个问题尚未解决,即使在最新的Insider版本中(例如,我现在在18361)。

很乐意对此进行修复。 真的像Consolas,可以在Windows下进行开发。

使用内部Microsoft 1903版本可以确认Consolas和UFT8仍然存在此错误。 Lucida Console字体可以正常工作,这将是我的解决方法

我们正在研究PSReadLine的新更新,然后我们将介绍如何将其添加到Windows中

在pwsh 6.2.0上,此问题似乎已解决,但是在我使用msbuild 2017构建任何东西(2015版本很好)之后又回来了。 我不确定这到底是在哪里发生的,因为它来自node-gyp ,但是如果需要(重新)构建本机模块,我的控制台将恢复为光栅字体。

幸运的是,仅在运行node-gyp时,我不再每次打开终端时都需要重置字体。

PSReadLine 2.0.0-beta4已发布,应该解决许多问题(尽管它有一些新问题)。 https://www.powershellgallery.com/packages/PSReadLine/2.0.0-beta4

@ SteveL-MSFT 2.0.0-beta4无法修复此错误。

我使用git的bash.exe + phpunit =相同问题的常规CMD终端。 脚本开始运行几秒钟后出现。
在PowerShell中不确定原因...

@ SteveL-MSFT 2.0.0-beta4也无法为我修复该错误。

@sebgod感谢您的提示,我已经从Consolas 16切换到Lucida Console 14,在我看来几乎一样。

我再找一个人看看

@ SteveL-MSFT要复制此内容,请打开命令提示符,将字体设置为Consolas,
然后运行cmd /c chcp 65001 >NUL && powershell

好的,我认为我确定了实际的问题,与PSReadLine没有任何关系。 Windows PowerShell中进行了检查,以查看Consolas字体是否支持代码页。 清单在这里。 UTF-8 65001不在该列表中,因此,每当Windows PowerShell识别Consolas不支持的代码页时,它将字体更改为Terminal 。 PowerShell Core 6.x不再具有此代码,因此您不会看到此行为。 我不愿意更改此代码,因为它可能会破坏其他内容。 对于我自己的注释,这在ConsoleControl.cs第2648行中。

好的,我认为我确定了实际的问题,与PSReadLine没有任何关系。 Windows PowerShell中进行了检查,以查看Consolas字体是否支持代码页。 清单在这里。 UTF-8 65001不在该列表中,因此,每当Windows PowerShell识别Consolas不支持的代码页时,它将字体更改为Terminal 。 PowerShell Core 6.x不再具有此代码,因此您不会看到此行为。 我不愿意更改此代码,因为它可能会破坏其他内容。 对于我自己的注释,这在ConsoleControl.cs第2648行中。

由于最新版本的Windows 10之前不支持UTF-8,因此不确定如何解决此问题。

@sebgod在这里破坏了某些东西意味着渲染不正确,因为我确定Consolas没有UTF-8所需的所有字形

@ SteveL-MSFT Lucida控制台,Courier New和不受此问题影响的所有其他可用字体,尽管它们也不支持代码页65001。 巧合的是,Consolas甚至比Lucida Console支持更多的代码页。 那么,为什么仅在Consolas中会发生这种情况?

但是一般来说,应该由用户决定使用哪种字体显示。 如果不存在字形,它们将显示为 ,并且用户可以决定更改字体。

@Borkason从母语为英语的人的角度来看,我认为这是一个非常明确的问题,但是毫无疑问,这担心

例如, @ bitcrazed (Microsoft终端团队的另一位成员)向cURL引入PR时,它将实现Windows VT支持https://github.com/curl/curl/pull/3011 (将代码页更改为65001),最终给国际用户造成了问题: https :

这需要一个使用宽字符串API而不是在当前代码页中写入UTF-8的补丁: https :

令我感到惊讶的是,Microsoft Terminal团队之后希望非常谨慎地进行处理。

@sebgod在这里破坏了某些东西意味着渲染不正确,因为我确定Consolas没有UTF-8所需的所有字形

好的,Windows没有提供一种字体来覆盖UTF-8中定义的所有字形。 Cmd.exe依靠一种称为字体链接的技术来提供所有字形的呈现。
在将UTF-8设置为系统代码页之前,必须手动使用chcp 65001 ,但是它可以正常工作。 字体链接位必须在注册表中手动完成才能使其在任何情况下都能正常工作。

@ImportTaste我认为这与它无关。 仅当使用Consolas时,后备才会生效。 如果使用了其他字体(如Lucida Console或Courier New),则不会发生这种情况。 至少Lucida Consolas具有与Consolas相同的代码页支持,因此很难理解为什么这样做。 如果国际用户会遇到问题(顺便说一句,我不是您所说的母语的英语),它仍然会影响所有未使用Consolas的用户。

从我的角度来看,后备功能不应放在首位(请参阅PWSH 6 + 7),也不应该草率​​地实施(为什么只有Consolas?)。

@ SteveL-MSFT而且我认为修复它根本没有风险,因为该错误仅在Windows 1809版中引入,并且显然是未记录的更改,也没人知道为什么要对其进行更改。

@Borkason正如我所说,这是意外错误的一个相关示例。

令我惊讶的是,据说它只是1809年的更改,过去我曾经遇到过将控制台字体更改为栅格的问题。

仅在1809年才检测到它,因为控制台的默认字体为Consolas。 在此之前,我相信是Lucida Console吗? 而且代码对该字体的工作方式相同。 我对代码的了解(自从我在PowerShell团队工作之前就一直存在)在Windows源代码中,我们只有一个用于PowerShell的快捷方式,并且该快捷方式定义了默认字体。 因此,当更改默认字体时,东亚用户抱怨说,由于该字体不支持该字形,因此无法渲染它们。 因此,此代码检测到字体和语言环境不兼容,并将其切换为将要呈现的字体。

我不愿在Windows PowerShell中进行任何更改,因为即使是看似很小的更改也会导致意外的回归。

@sebgod &all:这里有几件事:

澄清说明

  1. 在任何平台上都没有单一的字体,它包含可以用UTF-8表示的每个代码点的每个字形。
  2. Cmd.exe对字体一无所知-Cmd.exe是一个外壳程序
  3. 控制台(ConHost.exe)在Windows中提供传统的“类似于终端的”命令行UX
  4. 控制台的当前文本呈现引擎不支持回退字体,也无法呈现大多数表情符号-试试看,您将看到不可显示的字符(框中的问号)

终端机和控制台

Windows Terminal是我们新的下一代Terminal UX。 它与内置控制台共享一些通用组件,并且添加了一些新功能,包括文本缓冲区和文本渲染器,它们可以/将存储和显示几乎所有的Unicode字形。

这些组件最终将被重新引入到内置控制台中,但要等到我们发布Terminal v1.0之后,它们才有时间在实际使用中经过充分测试。

电源外壳

正如@ SteveL-MSFT指出的那样,PowerShell Core(PSCore)不会出现此问题,并且由于PSCore是PowerShell的未来,因此我们建议您尽可能使用它。

更改PowerShell for Windows(PS)的行为可能很困难,因为从尝试修复/更改Cmd的行为可以知道,即使很小的看似无害的更改也可能导致现实世界中的意外损坏。

就是说,我将与Steve&Team讨论,我们将探讨是否可以修改PS以选择代码页65001的非光栅字体(例如Consolas / Lucida / etc。)。

@sebgod &all:这里有几件事:

澄清说明

  1. 在任何平台上都没有单一的字体,它包含可以用UTF-8表示的每个代码点的每个字形。

是的,这就是为什么我说“ Windows没有提供一种字体来覆盖UTF-8中定义的所有字形”的原因

  1. Cmd.exe对字体一无所知-Cmd.exe是一个外壳程序

是的,我很懒惰,我只是想参考一下,如果您在Windows搜索框中键入“ cmd.exe”会发生什么

  1. 控制台(ConHost.exe)在Windows中提供传统的“类似于终端的”命令行UX
  2. 控制台的当前文本呈现引擎不支持回退字体,也无法呈现大多数表情符号-试试看,您将看到不可显示的字符(框中的问号)

据我了解,当前引擎无法从更高的Unicode平面渲染任何字符,包括(大多数)表情符号字符。

现在我不得不挑剔,我在谈论字体链接,它受支持或至少可以正常工作:

通过在键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink下添加值Lucida Console HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink
类型REG_MULTI_SZ且以下数据(或类似数据,应为等宽字体):

MSGOTHIC.TTC,MS UI Gothic
MINGLIU.TTC,PMingLiU
SIMSUN.TTC,SimSun
GULIM.TTC,Gulim
YUGOTHM.TTC,Yu Gothic UI
MSJH.TTC,Microsoft JhengHei UI
MSYH.TTC,Microsoft YaHei UI
MALGUN.TTF,Malgun Gothic
SEGUISYM.TTF,Segoe UI Symbol

使用chcp 65001或自1803年以来,可以通过将系统代码页设置为UTF-8(测试版,但到目前为止有效)来显示大多数Unicode基本平面字形,我个人更喜欢为每个代码使用特定的代码页语言,因为我使用多种语言。

image

现在,我更喜欢使用Consolas,它自1903年以来就无法使用,因为它已切换为光栅字体。

终端机和控制台

Windows Terminal是我们新的下一代Terminal UX。 它与内置控制台共享一些通用组件,并且添加了一些新功能,包括文本缓冲区和文本渲染器,它们可以/将存储和显示几乎所有的Unicode字形。

这些组件最终将被重新引入到内置控制台中,但要等到我们发布Terminal v1.0之后,它们才有时间在实际使用中经过充分测试。

是的,我已经使用了新的Terminal UX,使用起来当然非常令人愉快,但是目前不允许输入汉字(我希望最终会解决此问题)

电源外壳

正如@ SteveL-MSFT指出的那样,PowerShell Core(PSCore)不会出现此问题,并且由于PSCore是PowerShell的未来,因此我们建议您尽可能使用它。

更改PowerShell for Windows(PS)的行为可能很困难,因为从尝试修复/更改Cmd的行为可以知道,即使很小的看似无害的更改也可能导致现实世界中的意外损坏。

就是说,我将与Steve&Team讨论,我们将探讨是否可以修改PS以选择代码页65001的非光栅字体(例如Consolas / Lucida / etc。)。

如果变更会破坏某些东西,而我们甚至无法确切知道什么,那么终端中什么也不会改变?

我使用Powershell Core“修复”了该问题。 我首先注意到,Powershell设置没有任何作用(但是它确实更改了cmd.exe上的设置)。 经过几个小时的尝试,我偶然发现了Powershell Core,下载后,打开Powershell Core预览版后,之前保存的设置立即生效。

从FAR管理器运行一些命令(包括独家消息)时遇到了相同的问题-这种效果只会破坏FAR的显示方式。 仅在启用Consolas字体和Beta选项以在控制台中使用UTF-8(65001)代码页时发生。 我的语言环境是俄语。

作为最终用户-当程序尝试变得比我聪明时,这确实很烦人。 我可以使用问号代替一些UTF-8符号,但是这种字体更改只会破坏程序显示,而这些程序根本不应该受到影响,例如FAR manger。 真痛苦

现在,我不得不恢复为控制台的俄语语言环境(从UTF-8返回),但是这限制了使用其他语言环境的符号命名的文件的使用。 我希望您可以删除Consolas的特殊处理方式。

我有同样的问题,但前提是我尝试使用consolas。 @ SteveL-MSFT可能是正确的。
我尝试了Lucida Console,并且工作正常。 所以我猜Consolas缺少utf-8的字形(我的代码页)?
Powershell Core 7适用于所有字体。

令人难以置信的是,我在2020年(xps15)购买了Windows笔记本电脑,但遇到了同样的问题。 稍后可能有数百个Windows更新,问题仍然存在。 如果PS Core是2019年的未来,为什么不安装2020年? PS Core可能是默认的,也许可以安装旧PS作为备用,以防某些人需要兼容性问题。 无论如何,我安装了Windows Terminal,然后尝试一下。

@marcelomgarcia FWIW,默认情况下未在Windows中安装PowerShell 7的原因是由于支持和责任问题。 Windows和PowerShell 7具有不同的支持,据我所知,律师还没有找到解决方法。 现在,无论如何。 我确信每个人都希望看到Windows 10或Windows Server附带的PowerShell 7。

Rember:Windows PowerShell是Windows 10的核心组件,默认安装程序会将其添加到笔记本电脑上的已安装文件中。 它是完全受支持的组件FWIW。 但是,如果要使用PowerShell 7,那是一个独立的,非集成的安装过程。

您的计算机是什么语言?

感谢您的解释@doctordns。 这只是一个令人沮丧的问题,对于外面的人来说似乎是一个“简单”的问题。 我正在安装PowerShell 7。

我使用美国英语。

此页面是否有帮助?
0 / 5 - 0 等级