关于PowerShell中的OutputType方法属性
2016-04-29 11:32
417 查看
在Windows PowerShell 中有一个新属性就是OutputType,这个属性的主要作用就是用来描述方法所返回的对象类型。接下来让我们看看如何使用这个OutputType属性在普通函数和高级函数中的使用。
首先OutputType的使用语法大致如下,在这里ParameterSetName又是可选的,所以我们不需要每次都使用。
我们甚至还可以使用多个OutputType类型,比如下面这样:
接着让我们实际写个简单的函数来看看到底如何使用
这里需要注意的是OutputType属性必须定义在Param前面,在如上例子中我们给OutputTpye设置了一个System.DateTime类型,也就是说这个函数要返回的是一个DateTime类型,最后调用这个函数并把它复制给Result变量。如下图所示,你会看到当你在使用Result这个变量后面插入"." 点符号后PowerShell ISE就会自动智能感知该函数会返回DateTime类型,所以你也会得到DateTime类型相关的属性以及方法。
我们再来看看在高级函数中配合ParameterSetName的使用例子:
当然设定了OutputType属性的函数未必每次返回的类型都是精确的,我们可以看看如下例子就知道为什么说未必每次都是精确的。
该函数体设置了一个String类型的 OutputType属性值,但是我们通过GetType方法却得到如下结果,很明显方法返回了一个DateTime类型。
但是我们用Get-Command 去查看函数并调用OutputType属性时会发现依然是我们定义的String类型
首先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更多的只是为了描述函数体要返回何种类型,但未必就一定是你所描述的。
相关文章推荐
- shell参数扩展
- shell参数扩展
- Linux命令 + Shell
- shell script笔记
- shell中不可不知的叹号
- Shell编程基础
- shell数组处理
- shell数组处理
- PowerShell 总结
- Xshell怎样登陆本地虚拟机
- 关于shell命令的定向输出 2>&1
- 02- Shell脚本学习--运算符
- iOS toolchain for bash on windows
- Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录【已成功实例】
- shell脚本学习笔记 (sed的高级用法----模式空间和保持空间)
- 第一个shell脚本
- hbase的shell操作和java操作
- Apache OpenMeetings 会议系统getshell初探 - 2016-04-28 16:48
- Linux Shell 04 数字/字符串/文件测试
- Shell编程基础