未在PowerShell中传递的参数
我有一个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
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("|")