powershell 如何在管道中自动完成对象属性?

cdmah0mi  于 2022-12-13  发布在  Shell
关注(0)|答案(1)|浏览(125)

管道中的下一个命令如何识别我的输出对象属性名称?
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

但是,对于随后的“选择对象”命令,不会自动完成FileInfo属性。

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

我需要做什么来获得自动完成?这是否需要创建一个.xml文件来格式化?

gmxoilav

gmxoilav1#

使用**[OutputType()]属性**,如概念性about_Functions_OutputTypeAttribute帮助主题中所述:

function Find-MyFile {
  [OutputType([System.IO.FileInfo])]  
  [CmdletBinding()]  # Note: No strict need for this, but param(...) IS required.
  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 Tab,则会获得与File参数集的输出类型(即[System.IO.FileInfo])相关的属性。
  • 如果键入Find-MyFile -Date | Select-Object Tab,则会获得与Date参数集的输出类型(即[datetime])相关的属性。

通常,请注意此属性实际上是对调用方的非强制 * 承诺 *:由您的函数来确保它输出的对象实际上是该类型的。

相关问题