从自定义cmdlet管道后,Intellisense不起作用(Powershell ISE)

时间:2017-05-22 13:25:49

标签: powershell

如果我在PowerShell ISE编辑器中输入以下行,我会在$_变量中的点运算符后得到Intellisense:

Get-ChildItem ATextFile.txt | foreach { $_.FullName }

在这种情况下,$_System.IO.FileSystemInfo的实例。编辑器将正确列出此对象中的所有可访问成员。

现在,如果我写:

function GetFile {
  return [System.IO.FileInfo]::new(".\ATextFile.txt")
}

GetFile | foreach { $_.FullName }

脚本运行正常,但Intellisense在$_中的点运算符后无效。

我是否缺少使IntelliSense正常工作的语法?也许是一个“记录”返回值的注释?

1 个答案:

答案 0 :(得分:5)

您正在寻找 Param 部分上方的OutputType属性:

function GetFile {
    [OutputType([System.IO.FileInfo])]
    Param(

    )

  return [System.IO.FileInfo]::new(".\ATextFile.txt")
}

请考虑重命名您的文件以反映批准的动词 e。 G。 Get-File。另请注意,PowerShell中不需要return语句,因此您的函数应如下所示:

function Get-File 
{
    [OutputType([System.IO.FileInfo])]
    Param
    (
    )

    [System.IO.FileInfo]::new(".\ATextFile.txt")
}