Powershell 如何定义函数的返回类型/输出类型

Powershell 如何定义函数的返回类型/输出类型,powershell,Powershell,为什么以下类型正在更改 function SomeFunction($SomeParameter){ return $SomeParameter } 我想我需要设置一个返回类型,但是如何设置 一个例子是使用: $NewFolder=Join-Path $CurrentFolder -ChildPath $FolderName $Tmp=SomeFunction($NewFolder) 现在$Tmp是一个数组,而不仅仅是一个路径,您的问题在于每个设计。PowerShell将返回一个分块

为什么以下类型正在更改

function SomeFunction($SomeParameter){
    return $SomeParameter
}
我想我需要设置一个返回类型,但是如何设置

一个例子是使用:

$NewFolder=Join-Path $CurrentFolder -ChildPath $FolderName
$Tmp=SomeFunction($NewFolder)

现在$Tmp是一个数组,而不仅仅是一个路径,您的问题在于每个设计。PowerShell将返回一个分块的数组,以便将其转发到PowerShell管道

例如:

 SomeFunction -SomeParameter @(1,2,3,4) | Where-Object { $_ -gt 2 }
如果没有此行为,则无法将函数的输出管道化到另一个函数/cmdlet

如果要返回数组,可以将代码更改为:

 function SomeFunction($SomeParameter){
    <#
     # Through the unary operator we can return an array with one entry.
     # This entry contains the original array.
     #>
    ,$SomeParameter
}
还有一个更详细的解释行为


希望有帮助。

您的问题是每种设计。PowerShell将返回一个分块的数组,以便将其转发到PowerShell管道

例如:

 SomeFunction -SomeParameter @(1,2,3,4) | Where-Object { $_ -gt 2 }
如果没有此行为,则无法将函数的输出管道化到另一个函数/cmdlet

如果要返回数组,可以将代码更改为:

 function SomeFunction($SomeParameter){
    <#
     # Through the unary operator we can return an array with one entry.
     # This entry contains the original array.
     #>
    ,$SomeParameter
}
还有一个更详细的解释行为

希望这会有所帮助。

当您看到时,我将尝试回答实际问题:如何声明函数的预期输出类型

您可以通过向函数的param块添加[OutputType]属性来实现这一点,因此您要做的第一件事是跳过C样式的param列表,而是声明一个正确的param块:

function SomeFunction
{
    param($SomeParameter)

    return $SomeParameter
}
现在我们只需要添加[OutputType]属性装饰器:

function SomeFunction
{
    [OutputType([string])]
    param($SomeParameter)

    return $SomeParameter
}
因为我们只是像本例中那样返回参数值,所以我们应该很好地处理,并确保它实际上也是一个字符串:

function SomeFunction
{
    [OutputType([string])]
    param(
        [string]$SomeParameter
    )

    return $SomeParameter
}
值得注意的是,[OutputType]对执行期间发出的对象的类型没有任何保证,它只是函数作者指示预期输出类型的一种方式

阅读

中有关[OutputType]的更多信息,在这里我将尝试回答实际问题:如何声明函数的预期输出类型

您可以通过向函数的param块添加[OutputType]属性来实现这一点,因此您要做的第一件事是跳过C样式的param列表,而是声明一个正确的param块:

function SomeFunction
{
    param($SomeParameter)

    return $SomeParameter
}
现在我们只需要添加[OutputType]属性装饰器:

function SomeFunction
{
    [OutputType([string])]
    param($SomeParameter)

    return $SomeParameter
}
因为我们只是像本例中那样返回参数值,所以我们应该很好地处理,并确保它实际上也是一个字符串:

function SomeFunction
{
    [OutputType([string])]
    param(
        [string]$SomeParameter
    )

    return $SomeParameter
}
值得注意的是,[OutputType]对执行期间发出的对象的类型没有任何保证,它只是函数作者指示预期输出类型的一种方式

在中阅读有关[OutputType]的更多信息