使用 shell 中的 tab-completion

PowerShell 提供输入自动补全功能,以提供提示、启用发现和加快条目输入速度。 通过按 Tab 键,可自动补全命令名称、参数名称、参数值和文件路径。

Tab 键是 Windows 上的默认键绑定。 PSReadLine 还提供绑定到 Ctrl+SpaceMenuComplete 函数。 此 MenuComplete 函数在命令行下方显示匹配的自动补全列表。

可以使用 PSReadLine cmdlet 或托管 PowerShell 的应用程序更改这些键绑定。 在非 Windows 平台上,键绑定可能有所不同。 有关详细信息,请参阅 about_PSReadLine_Functions

内置的 Tab 自动补全功能

PowerShell 支持对命令行体验的许多方面进行 Tab 自动补全。

文件名自动补全

若要从可用选择中自动填充文件名或路径,键入部分名称并按下 Tab 键。 PowerShell 会自动将名称扩展至找到的第一个匹配项。 再次按 Tab 键可在每次按键时循环显示所有可用选项。

命令和参数名称自动补全

名称的 Tab 键扩展稍有不同。 若要在 cmdlet 名称上使用 Tab 键扩充,键入名称的整个第一部分(即谓词),然后是后跟的连字符。 你可以填入名称的更多内容以进行部分匹配。 例如,如果键入 get-co 然后按 Tab 键,PowerShell 会自动将其扩展为 Get-Command cmdlet(注意,还会将字母的大小写改为标准形式)。 如果再次按 Tab 键,PowerShell 会将此替换为另一个唯一匹配的 cmdlet 名称 Get-Content。 Tab 自动补全功能还可用于解析 PowerShell 别名和本机可执行文件。

下图显示了 Tab 和菜单自动补全的示例。

Tab 和菜单自动补全示例

其他 Tab 自动补全增强功能

每个新版本的 PowerShell 都包含对 Tab 自动补全的改进,修复了 bug 并提升了可用性。

PowerShell 7.0

  • Tab 自动补全功能可解析属于枚举或类型受约束的变量赋值
  • Tab 自动补全可展开缩写的 cmdlet 和函数。 例如,i-psdf<tab> 返回 Import-PowerShellDataFile

PowerShell 7.2

  • 修复了未本地化的 about* 主题的 Tab 自动补全功能
  • 修复了自动补全功能中被视为位置参数的 splatting
  • 为基于评论的帮助关键字添加了自动补全功能
  • #requires 语句添加了自动补全功能
  • Format-* cmdlet 的 View 参数添加了 Tab 自动补全功能
  • 添加了对基于类的参数补全程序的支持

PowerShell 7.3

  • 修复了为 ValidateScriptAttribute 指定的脚本块中的 Tab 自动补全功能
  • breakcontinue 后为循环标签添加了 Tab 自动补全功能
  • 在多个方案中改进哈希表自动补全
    • 参数展开
    • Invoke-CimMethod 的 Arguments 参数
    • Get-WinEvent 的 FilterHashtable 参数
    • CIM cmdlet 的 Property 参数
    • 从成员完成方案中删除重复项
  • 在网络共享(UNC 路径)自动补全中支持正斜杠
  • 改进了成员自动补全
  • 为参数优先考虑 ValidateSet 自动补全,而不是枚举
  • 为具有类型参数的泛型方法添加了类型推理支持
  • 改进了类型推理和自动补全
    • 允许在 ForEach-Object -MemberName 的完成结果中显示方法
    • 阻止了返回 void 的表达式的自动补全(如 ([void]("")))
    • 允许非默认类构造函数在类完成基于 AST 时显示

增强命令参数 Tab 自动补全功能的其他方法

内置的 Tab 键扩展由内部函数 TabExpansion 或 TabExpansion2 控制。 可以创建替换这些函数的默认行为的函数或模块。 可以通过搜索 TabExpansion 关键字在 PowerShell 库中查找示例。

使用具有参数的 ValidateSetArgumentCompletions 属性

通过 ArgumentCompletions 属性,你可以向特定参数添加 Tab 自动补全值。 ArgumentCompletions 属性类似于 ValidateSet。 当用户在参数名称后按 Tab 时,这两个属性都会接收要显示的值列表。 但是,与 ValidateSet 不同,不会验证这些值。

有关详细信息,请参阅:

使用具有参数的 ArgumentCompleter 属性或 Register-ArgumentCompleter

参数补全程序是脚本块或函数,可为参数值提供动态 Tab 自动补全功能。

通过 ArgumentCompleter 属性,你可以注册一个为参数提供 Tab 自动补全值的函数。 参数补全程序函数必须可用于包含具有 ArgumentCompleter 属性的参数的函数。 通常,此函数在相同的脚本或模块中定义。

有关详细信息,请参阅 ArgumentCompleter

Register-ArgumentCompleter cmdlet 在运行时为你指定的任何命令注册一个脚本块作为参数补全程序函数。 这使你能够在脚本或模块之外或为本机命令定义参数补全程序。 有关详细信息,请参阅 Register-ArgumentCompleter

PSReadLine 中的预测性 IntelliSense

PSReadLine 2.1.0 引入了预测性 IntelliSense 功能。 预测性 IntelliSense 根据 PSReadLine 历史记录中的项提供针对完整命令的建议。

PSReadLine 2.2.2 通过添加对使用高级逻辑的插件模块的支持来扩展预测性 IntelliSense 的功能,从而提供针对完整命令的建议。 Az.Tools.Predictor 模块是预测性 IntelliSense 的第一个插件。 它使用机器学习来预测你想要运行的 Azure PowerShell 命令以及想要使用的参数。

有关详细信息,请参阅使用预测器