关于PowerShell中的OutputType方法属性

在Windows PowerShell 中有一个新属性就是OutputType,这个属性的主要作用就是用来描述方法所返回的对象类型。接下来让我们看看如何使用这个OutputType属性在普通函数和高级函数中的使用。

首先OutputType的使用语法大致如下,在这里ParameterSetName又是可选的,所以我们不需要每次都使用。

[OutputType([<TypeLiteral>], ParameterSetName="<Name>")]
[OutputType("<TypeNameString>", ParameterSetName="<Name>")]

我们甚至还可以使用多个OutputType类型,比如下面这样:

[OutputType([<Type1>],[<Type2>],[<Type3>])]


接着让我们实际写个简单的函数来看看到底如何使用

function Get-OutType
{
    [CmdletBinding()]
    [OutputType([System.DateTime])]
    Param
    (
        [Parameter(Mandatory=$true)]
        [Int]$Hour
    )

  
}

$Result = Get-Date

这里需要注意的是OutputType属性必须定义在Param前面,在如上例子中我们给OutputTpye设置了一个System.DateTime类型,也就是说这个函数要返回的是一个DateTime类型,最后调用这个函数并把它复制给Result变量。如下图所示,你会看到当你在使用Result这个变量后面插入"." 点符号后PowerShell ISE就会自动智能感知该函数会返回DateTime类型,所以你也会得到DateTime类型相关的属性以及方法。



我们再来看看在高级函数中配合ParameterSetName的使用例子:

function Get-UserInfo
{
    [CmdletBinding(DefaultParameterSetName="Age")]

    [OutputType("System.Int32", ParameterSetName="Age")]
    [OutputType([String], ParameterSetName="Name")]

    Param 
    (      
        [parameter(Mandatory=$true, ParameterSetName="Age")]
        [Int]
        $UserAge,

        [parameter(Mandatory=$true, ParameterSetName="Name")]
        [String]
        $UserName
    )     
                  
    $UserAge
    $UserName
}

当然设定了OutputType属性的函数未必每次返回的类型都是精确的,我们可以看看如下例子就知道为什么说未必每次都是精确的。

function Get-OutType
{
    [CmdletBinding()]
    [OutputType([String])]
    Param
    (
        [Parameter(Mandatory=$false)]
        [Int]$Hour
    )

    return Get-Date
}

(Get-OutType).GetType()

该函数体设置了一个String类型的 OutputType属性值,但是我们通过GetType方法却得到如下结果,很明显方法返回了一个DateTime类型。

<p class="p1">IsPublic IsSerial Name                                     BaseType                                                                                                                            </p><p class="p1">-------- -------- ----                                     --------                                                                                                                            </p><p class="p1">True     True     DateTime                                 System.ValueType  </p>

但是我们用Get-Command 去查看函数并调用OutputType属性时会发现依然是我们定义的String类型

Name          Type          TypeDefinitionAst
----          ----          -----------------
System.String System.String          
所以OutputType更多的只是为了描述函数体要返回何种类型,但未必就一定是你所描述的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值