如何阻止自定义PowerShell补全回退到文件路径建议?
解决PowerShell原生命令补全无建议时阻止文件回退的问题
要阻止PowerShell在自定义补全无有效建议时自动回退到文件/目录补全,你需要在无建议场景下返回一个无效类型的补全结果,而非空输出或空数组。具体实现如下:
修改后的补全脚本块
$scriptblock = { param($wordToComplete, $commandAst, $cursorPosition) # 收集由my-completion-generator生成的有效补全建议 $validCompletions = my-completion-generator $commandLineInfo | ForEach-Object { [System.Management.Automation.CompletionResult]::new($value, $display, 'ParameterValue', $tooltip) } # 当无有效建议时,返回InvalidResult类型的结果,阻止默认回退 if (-not $validCompletions) { return [System.Management.Automation.CompletionResult]::new( '', '', [System.Management.Automation.CompletionResultType]::InvalidResult, '' ) } # 有有效建议时返回正常结果 return $validCompletions }; Register-ArgumentCompleter -Native -CommandName my-command -ScriptBlock $scriptblock
原理说明
- PowerShell默认行为:如果补全脚本块返回
$null或无输出,会自动触发文件/目录补全回退。 - 返回
InvalidResult类型的CompletionResult对象时,PowerShell会判定为"无有效补全建议",既不会显示任何建议,也不会触发默认回退机制。 - 空数组
@()仍会被PowerShell视为无有效输出,无法阻止回退,必须返回至少一个无效类型的结果。
内容的提问来源于stack exchange,提问作者MichaelJones
相关产品推荐
相关产品推荐

