为什么Powershell会在一个$ PATH中搜索PSConsoleHostReadLine文件中的每个目录?

时间:2013-06-27 13:44:30

标签: windows powershell

所有!

我注意到Powershell,或者更具体地说,在Powershell中粘贴和制表完成,在从v2升级到v3后,我的机器上的速度要慢得多。我打开 procmon 来查看发生了什么,只是发现每个尝试选项卡完成或粘贴任何触发器Powershell来查找提供的文件的各种排列主题。我的$ PATH中有一些网络文件夹,每次粘贴时都会浏览这些文件夹似乎不太理想。

似乎这个文件允许Powershell更像Bash。虽然这绝对是非常棒的,我期待在不久的将来滥用这个功能,有没有办法配置Powershell,以便它只尝试在一个目录中找到这个文件?

谢谢!

2 个答案:

答案 0 :(得分:1)

PSConsoleHostReadLine实际上是一个函数。如果PoSH找不到方法,别名或其他任何可以使用该名称执行的操作,则它会回退到默认的“cooked”readline并进行编辑等。

要重新定义它,请创建一个函数:

function PSConsoleHostReadline {
    [Console]::Readline()
}

正如所写,这种方法禁用编辑等。编写你自己的疯狂魔法来做任何你想做的事。

我猜它正在搜索所有额外的位置,因为Powershell 3有“模块自动加载”,它检查ENV:PSModulePath中已知的所有位置的功能,并自动加载包含所述方法的模块。 / p>

答案 1 :(得分:0)

这是对V3的疏忽。 V4只会搜索函数或别名 - 在查找PSConsoleHostReadline时它不会搜索外部exes。

如果您正在寻找类似体验的bash,请查看https://github.com/lzybkr/PSReadLine