【问题标题】:How to get autocompletion for object properties in pipeline?如何获得管道中对象属性的自动完成?
【发布时间】:2022-11-19 14:00:50
【问题描述】:

管道中的下一个命令如何识别我的输出对象属性名称?

PowerShell 控制台将自动完成属性名称,这非常有帮助。仅输入“fulln”并按 TAB 将生成“FullName”。

Get-ChildItem | Select-Object -Property fulln<TAB>

我编写的脚本生成 System.IO.FileInfo 对象。

PS C:\> (Find-MyFile -Files @('whatiwant.txt','whatelseiwant.txt')[0].GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    FileInfo                                 System.IO.FileSystemInfo

但是,对于后续的 Select-Object 命令,FileInfo 属性的自动完成并未完成。

PS C:\> (Find-MyFile -Files @('whatiwant.txt','whatelseiwant.txt') | Select-Object -Property lastw<TAB>

我需要做什么才能自动完成?这是否需要创建用于格式化的 .xml 文件?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    使用 [OutputType()] 属性:

    function Find-MyFile {
      [OutputType([System.IO.FileInfo])]  
      [CmdletBinding()]
      param() 
      # ...
    }
    

    Tab 完成然后根据指定类型的实例的属性完成。

    请注意,您可以拥有,特定于参数集[OutputType()]属性;这是一个人为的例子:

    function Find-MyFile {
      [OutputType([System.IO.FileInfo], ParameterSetName='File')]
      [OutputType([datetime], ParameterSetName='Date')]
      [CmdletBinding(DefaultParameterSetName='File')]
      param(
        [Parameter(ParameterSetName='Date')]
        [switch] $Date
      )
    }
    
    • 如果你输入Find-MyFile | Select-Object 标签,您将获得与 File 参数集的输出类型相关的属性,即 [System.IO.FileInfo]

    • 如果你输入Find-MyFile -Date | Select-Object 标签,您将获得与 Date 参数集的输出类型相关的属性,即 [datetime]


    通常,请注意此属性实际上是一个承诺对调用者:由你的函数来确保它输出的对象实际上是那种类型的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2011-09-07
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多