微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重新启用导入模块 Psreadline 警告

如何解决重新启用导入模块 Psreadline 警告

此警告在 Visual Code 应用程序的终端中不断弹出

Warning: PowerShell detected that you might be using a screen reader and has
         disabled PSReadLine for compatibility purposes.
         If you want to re-enable it,run 'Import-Module PSReadLine'.

即使我通过 regedit 将值更改为 0,警告仍然显示

解决方法

您的症状的含义是:

  • 在您的 PowerShell 会话开始时,Windows 处于屏幕阅读器模式(针对视障人士的 Windows 辅助功能)。

  • 您正在使用 常规 PowerShell 会话,无论是在控制台窗口/Windows 终端中还是在 Visual Studio Code 的集成终端中。

    • 相比之下,如果您将 Visual Studio Code PowerShell extension 结合使用,从而实现更丰富的 PowerShell 代码创作体验,则不会出现问题,因为由所谓的 PowerShell Integrated Console do not 中的扩展执行此检查(从 2021.2.2 版本开始),因此 do 加载 {{3} } (该模块提供丰富的命令行编辑体验)并且不发出警告。目前尚不清楚这种无条件覆盖是设计还是疏忽。

如果此模式被(意外地)持续打开,通过注册表,您可以按如下方式关闭它:

Set-ItemProperty 'registry::HKEY_CURRENT_USER\Control Panel\Accessibility\Blind Access' On 0

注意

  • 此更改需要注销或重新启动才能生效。

  • 查询持久模式,请使用:

    Get-ItemPropertyValue 'registry::HKEY_CURRENT_USER\Control Panel\Accessibility\Blind Access' On`
    
  • 如果模式已设计启用,但您希望 PowerShell 仍加载 PSReadline 模块以获得丰富的命令行体验,请将 Import-Module PSReadLine 放在您的 $PROFILE 文件。 请注意,您仍然总是会看到警告,因为它是在 $PROFILE 文件被处理之前发出的。


如果此模式意外地被在操作系统会话中打开,则是由行为不端的应用程序打开的,因为它不会将模式恢复再次关闭或在能够这样做之前已经崩溃,您可以临时编译 C# 代码以关闭该模式(感谢改编自 PSReadLine),以便 未来 PowerShell 会话在同一个操作系统用户会话中不再看到警告

(Add-Type -PassThru -Name ScreenReaderUtil -Namespace WinApiHelper -MemberDefinition @'
  const int SPIF_SENDCHANGE = 0x0002;
  const int SPI_SETSCREENREADER = 0x0047;

  [DllImport("user32",SetLastError = true,CharSet = CharSet.Unicode)]
  private static extern bool SystemParametersInfo(uint uiAction,uint uiParam,IntPtr pvParam,uint fWinIni);

  public static void EnableScreenReader(bool enable)
  {
    var ok = SystemParametersInfo(SPI_SETSCREENREADER,enable ? 1u : 0u,IntPtr.Zero,SPIF_SENDCHANGE);
    if (!ok)
    {
      throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
    }
  }
'@)::EnableScreenReader($false)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。