2

我有两段代码:

# 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] 变量,但不能将其传递给函数?

4

3 回答 3

4

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)
于 2012-06-13T07:45:08.457 回答
3

你可以这样做:

test -t2 "switch"

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

function test ([type]$t2) {  }
[type]$t1 = [switch] 
test -t2 $t1 
于 2012-06-13T07:40:49.277 回答
2

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

function test ([type]$t2) {  }
test -t2 ([switch])
于 2012-06-13T14:40:05.727 回答