如何在函数中传递“Type”参数?

时间:2012-06-13 07:29:22

标签: powershell

我有两段代码:

# code 1:
[type]$t1 = [switch] 
# all is ok, code works as expected

#code 2:
function test ([type]$t2) {  }
test -t2 [switch]
# here we get error. can't convert from string to system.type

我知道,我可以写:test -t2 "System.Management.Automation.SwitchParameter",但它很难看! 为什么我可以将[switch]设置为[type]变量,但不能将其传递给函数??

3 个答案:

答案 0 :(得分:3)

你可以这样做:

test -t2 "switch"

或者您可以使用code1中的示例并传入$t1本身:

function test ([type]$t2) {  }
[type]$t1 = [switch] 
test -t2 $t1 

答案 1 :(得分:3)

PowerShell允许您使用强制转换创建类型:

PS> [type]"switch"

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    SwitchParameter                          System.ValueType

您实际做的是传递括号中的类型名称:

PS> [type]"[switch]"
Cannot convert the "[switch]" value of type "System.String" to type "System.Type".

所以你只需要传递类型的名称:

test -t2 switch

test -t2 ([switch].fullname)

答案 2 :(得分:2)

将参数作为表达式包装到测试函数中,它将返回类型:

function test ([type]$t2) {  }
test -t2 ([switch])