在递归PowerShell函数中调用深度溢出,是否有解决方法?

时间:2013-09-30 12:55:06

标签: powershell

我使用PowerShell创建了一个脚本,用于检查Internet Explorer是否正在运行,如果不是,则运行在Kiosk mode中启动它的快捷方式。 这是脚本:

Invoke-Item 'C:\Users\User\Links\iexplorekiosk.lnk'
Function Processchecker {
    $ProcessIE = Get-Process iexplore -ErrorAction SilentlyContinue
    if (!$ProcessIE) {
        Invoke-Item 'C:\Users\User\Links\iexplorekiosk.lnk'
    }
    Processchecker
}
Processchecker

虽然当我运行这个时,我得到一个“调用深度溢出”错误,我相信这意味着它在函数和螺旋中运行一个函数,我相信PowerShell中的最大值是10。

有解决方法吗?因为我没有看到它。

1 个答案:

答案 0 :(得分:2)

您从ProcessChecker块中调用if,因此无论是否找到该过程,您每次都会递归一级。

立即解决方法是将递归调用添加到if子句中,如下所示:

Invoke-Item 'C:\Program Files\Internet Explorer\iexplore.exe'

Function Processchecker {
    $ProcessIE = Get-Process iexplore -ErrorAction SilentlyContinue
    if (!$ProcessIE) {
        Invoke-Item 'C:\Program Files\Internet Explorer\iexplore.exe'

        Processchecker
    }
}

Processchecker
  

In this scenario, a while loop would suffice and be easier on memory.