从自定义 cmdlet (Powershell ISE) 管道后智能感知不起作用



如果我在PowerShell ISE编辑器中键入以下行,我会在变量$_点运算符之后获得智能感知:

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

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

现在,如果我写:

function GetFile {
  return [System.IO.FileInfo]::new(".ATextFile.txt")
}
GetFile | foreach { $_.FullName }

脚本运行良好,但智能感知在 $_ 中的点运算符之后不起作用。

我是否缺少使智能感知正常工作的语法?也许是"记录"返回值的注释?

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

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

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

function Get-File 
{
    [OutputType([System.IO.FileInfo])]
    Param
    (
    )
    [System.IO.FileInfo]::new(".ATextFile.txt")
}

最新更新