我有一个PowerShell脚本,在代码的开头我创建了两个简单的函数来解析一些字符串:
Function createCase($subjid, $refids){
$ret = @{}
$ret.Add("subjid", $subjid)
$ret.Add("refids", $refids)
$ret.Add("subjents", @())
$ret.Add("refents", @())
return $ret
}
#Format input "subj;refid,refid,refid|subjid;refid,refid|subjid;refid"
function createCases($input){
$ret = @{}
$cases = $input.Split("|")
foreach ($case in $cases) {
$casearr = $case.Split(";")
$caseobj = createCase($casearr[0], $casearr[1].Split(","))
$ret.Add($casearr[0], $caseobj)
}
return $ret
}
然后我进一步呼吁这个功能createCases($input)
:
$input = "subj;refid,refid,refid|subjid;refid,refid|subjid;refid"
$cases = createCases($input)
然而,我之前定义的函数中的$input
变量没有被填充,我最终得到了一个错误:
方法调用失败,因为[System.Collections.ArrayList + ArrayListEnumeratorSimple]不包含名为“Split”的方法。
在线上发生了什么:
$cases = $input.Split("|")
当我使用调试器时,输入参数被正确设置为我想要的字符串。一旦我们跳进了这个功能,它就消失了。
答案 0 :(得分:4)
由于名称"输入"在Powershell中保留。重命名该变量,它应该更好。
有关详细信息,我可以向您推荐本文: https://dmitrysotnikov.wordpress.com/2008/11/26/input-gotchas/