PowerShell 提示出于兼容性目的已禁用PSReadLine问题
HDUZN

Windows10系统,发现每次PowerShell都有提示:

1
2
3
尝试新的跨平台 PowerShell https://aka.ms/pscore6

警告: PowerShell 检测到你可能正在使用屏幕阅读器,并且已出于兼容性目的禁用 PSReadLine。如果要重新启用它,请运行 "Import-Module PSReadLine"

但是,发现运行Import-Module PSReadLine后并没有解决。而办公室电脑的win10上很正常,并没有发现这个问题。

话说,是怎么发现这个问题的呢?倒也不是用PowerShell的时候,是因为用VS Code,发现终端界面上命令都没有高亮了,而终端用的就是PowerShell,感觉就是PowerShell的问题了。

于是,网上查了很多方法,下载了最新版的PowerShell也没用。

最终找到一个有用的。

解决方法:

1.创建一个.ps1文件(名字随便取,比如xiufu_powershell.ps1),粘贴以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Add-Type -TypeDefinition '
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
public static class ScreenReaderFixUtil
{
public static bool IsScreenReaderActive()
{
var ptr = IntPtr.Zero;
try
{
ptr = Marshal.AllocHGlobal(sizeof(int));
int hr = Interop.SystemParametersInfo(
Interop.SPI_GETSCREENREADER,
sizeof(int),
ptr,
0);
if (hr == 0)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
return Marshal.ReadInt32(ptr) != 0;
}
finally
{
if (ptr != IntPtr.Zero)
{
Marshal.FreeHGlobal(ptr);
}
}
}
public static void SetScreenReaderActiveStatus(bool isActive)
{
int hr = Interop.SystemParametersInfo(
Interop.SPI_SETSCREENREADER,
isActive ? 1u : 0u,
IntPtr.Zero,
Interop.SPIF_SENDCHANGE);
if (hr == 0)
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
}
private static class Interop
{
public const int SPIF_SENDCHANGE = 0x0002;
public const int SPI_GETSCREENREADER = 0x0046;
public const int SPI_SETSCREENREADER = 0x0047;
[DllImport("user32", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern int SystemParametersInfo(
uint uiAction,
uint uiParam,
IntPtr pvParam,
uint fWinIni);
}
}'
if ([ScreenReaderFixUtil]::IsScreenReaderActive()) {
[ScreenReaderFixUtil]::SetScreenReaderActiveStatus($false)
}

2.在PowerShell中运行这个文件

1
.\xiufu_powershell.ps1

然后重启PowerShell,就解决了。

当然,VS Code的终端中高亮问题也解决了。

  • 本文标题:PowerShell 提示出于兼容性目的已禁用PSReadLine问题
  • 本文作者:HDUZN
  • 创建时间:2022-12-04 20:35:25
  • 本文链接:http://hduzn.cn/2022/12/04/PowerShell提示出于兼容性目的已禁用PSReadLine问题/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论