参数没有传入PowerShell

时间:2018-05-18 09:36:44

标签: powershell

我有一个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("|")

当我使用调试器时,输入参数被正确设置为我想要的字符串。一旦我们跳进了这个功能,它就消失了。

1 个答案:

答案 0 :(得分:4)

由于名称"输入"在Powershell中保留。重命名该变量,它应该更好。

有关详细信息,我可以向您推荐本文: https://dmitrysotnikov.wordpress.com/2008/11/26/input-gotchas/