1

我使用 PowerShell 制作了一个脚本,用于检查 Internet Explorer 是否正在运行,如果没有,则运行一个快捷方式以在Kiosk 模式下启动它。这是脚本:

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。

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

4

1 回答 1

2

ProcessCheckerif块中调用,因此无论是否找到该进程,您每次都会递归一个级别。

一个直接的解决方法是将递归调用添加到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

在这种情况下,while循环就足够了,并且在内存上更容易。

于 2013-09-30T13:03:35.177 回答