powershell函数参数类型

Dzm*_*voi 4 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
Run Code Online (Sandbox Code Playgroud)

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

appendToSB:无法处理参数'sb'上的参数转换.无法将ty pe"System.Object []"的"System.Object []"值转换为"System.Text.StringBuilder"类型.在E:\ powershell\test.ps1:8 char:11 + appendToSb([system.text.stringbuilder] $ sb,"1,")+ ~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidData :( :) [appendToSB],ParameterBindingArgumentTransformationException + FullyQualifiedErrorId:ParameterArgumentTransformationError,appendToSB

有没有人可以解释函数/函数参数/返回值如何在powershell中工作?

Kei*_*ill 14

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

appendToSb $sb "1,"
Run Code Online (Sandbox Code Playgroud)

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