未在PowerShell中传递的参数

未在PowerShell中传递的参数,powershell,Powershell,我有一个PowerShell脚本,在代码的开头,我创建了两个简单的函数来解析一些字符串: Function createCase($subjid, $refids){ $ret = @{} $ret.Add("subjid", $subjid) $ret.Add("refids", $refids) $ret.Add("subjents", @()) $ret.Add("refents", @()) return $ret } #Format

我有一个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
变量没有被填充,我最终出现了一个错误:

方法调用失败,因为[System.Collections.ArrayList+ArrayListEnumeratorSimple]不包含名为“Split”的方法

这在线路上发生:

$cases = $input.Split("|")
当我使用调试器时,输入参数被正确地设置为我想要的字符串。一旦我们跳入函数,它就消失了。

这是由于Powershell中保留的名称“input”。重命名该变量,它会工作得更好

有关更多信息,请参阅本文:

这是由于Powershell中保留的名称“input”。重命名该变量,它会工作得更好

有关更多信息,请参阅本文:

@Default我尝试了“createCases($input)”和“createCases$input”@Default,但似乎没有改变任何事情。我仍然有一个enmpty$input参数function@Default这也是我的假设,因为它引用的是枚举数,但当我调试并检查变量$input的内容时,“是空的,跨过“$input.Split(“|”)行会生成error.wait-”input“是保留的。再试一次name@Default我尝试了“createCases($input)”和“createCases$input”@Default,这似乎没有改变任何事情。我仍然有一个enmpty$input参数function@Default这也是我的假设,因为它引用的是枚举数,但当我调试并检查变量$input的内容时,“是空的,跨过“$input.Split(“|”)行会生成error.wait-”input“是保留的。请尝试另一个名称Holy f*@#*&“&”…谢谢你说得对。它现在可以工作了。如果你试图使用保留变量作为输入参数,我会假设PS ISE可能会产生某种警告。再次感谢f*@#*&“&”&”。。谢谢你,你说得对。现在可以了。如果您尝试使用保留变量作为输入参数,我会假设PS ISE可能会产生某种警告。再次感谢
$cases = $input.Split("|")