powershell函数参数类型

时间:2013-10-03 22:32:55

标签: powershell

具有以下功能:

function appendToSB([System.Text.StringBuilder]$sb,
                    [string]$value){
    [void]$sb.append($value)
    $sb
}

$sb = new-object -typename system.text.stringbuilder
$sb = appendToSb($sb, "1,")

$sb.tostring() | out-host

我想使用我的函数使用StringBuilder构建字符串,但是我收到以下错误:

  

appendToSB:无法处理参数'sb'上的参数转换。   无法转换ty“System.Object []”的“System.Object []”值   键入“System.Text.StringBuilder”。在E:\ powershell \ test.ps1:8   焦炭:11   + appendToSb([system.text.stringbuilder] $ sb,“1,”)   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidData:(:) [appendToSB],ParameterBindingArgumentTransformationException       + FullyQualifiedErrorId:ParameterArgumentTransformationError,appendToSB

有人能解释函数/函数参数/返回值在powershell中是如何工作的吗?

1 个答案:

答案 0 :(得分:13)

经典PowerShell问题。调用命令或函数时,不要使用parens或逗号分隔的args:

appendToSb $sb "1,"

您只在调用.NET方法时使用该语法。如果您使用Set-StrictMode -Version 2,它将会遇到此类问题。您传递的内容($ sb,“1”,“)是将数组传递给单个参数的方式。从技术上讲,不需要parens但不改变值,即你可以传递像这样的数组$sb, ","