2

我正在为一些内部分层数据实现 Powershell PSProvider。一切正常,我可以使用通常的 cd/dir 命令在树中导航,唯一不起作用的是制表符完成。

我可以看到的是,当按下 Tab 时,Powershell 在路径中调用带有星号的函数 GetChildName()(如果我键入“dir c”并按 Tab,GetChildName() 函数将使用字符串“c*”调用几次)。我试图从以“c”开头的文件夹中返回所有子名称,但 Powershell 始终只在前面显示第一个子名称。我找不到有关此行为的任何文档,我缺少什么?

4

2 回答 2

0

我发现问题出在哪里 - 如果星号是名称的一部分,则提供程序中的函数 GetChildName() 不应尝试扩展给定的文件名;如果可以找到完全匹配的函数,则该函数应返回子名称,或者在任何其他情况下调用 base.GetChildName()。像这样的东西:

protected override string GetChildName(string path) {
    string name = SomeFunctionThatTriesToFindExactMatchForGivenPath(path);

    if(string.IsNullOrEmpty( ret ) )
        ret = base.GetChildName( path );

    return ret;
}

顺便说一句,我发现默认选项卡扩展对于可以从 GetChildName() 函数返回的内容非常宽容 - 即使返回值在前面/后面有斜杠/反斜杠,选项卡扩展也会起作用。但流行的标签扩展模块 PowerTab 对返回值更加挑剔。

于 2011-07-28T11:21:18.937 回答
0

你确定你不只是看到正常的行为吗?使用默认选项卡扩展,您只会看到第一个结果。再次按 Tab 键将循环浏览提供者返回的结果列表。

提供者有一些怪癖。我一直在使用 Script Provider 项目开发一个。我将调试代码放在我所有的方法中,以查看 PowerShell 调用了哪些方法、何时调用了哪些参数以及使用了哪些参数。

于 2011-06-24T18:32:49.613 回答