Exception 如何在PowerShell中配置调用深度?
我只是在PowerShell中尝试了一些东西,但在一些测试递归函数中得到了一个关于调用深度设置为1000的错误。我在Internet上查找了一些信息,发现这是由于PowerShell中的错误处理造成的(如果我没有弄错的话): 递归深度限制在版本1中是固定的。由于处理异常的方式,深度递归在64位模式下导致了问题。它导致了级联内存不足错误。最终的结果是,我们硬限制了所有平台上的递归深度,以帮助确保脚本可移植到所有平台。 -Bruce Payette,PowerShell的联合设计师 我找到了 此外,我在MSDN上发现了这个异常页面,该页面声明此限制是可配置的(但我没有找到任何关于如何执行此操作的信息)-请参阅备注部分 如何设置此限制?Exception 如何在PowerShell中配置调用深度?,exception,powershell,recursion,Exception,Powershell,Recursion,我只是在PowerShell中尝试了一些东西,但在一些测试递归函数中得到了一个关于调用深度设置为1000的错误。我在Internet上查找了一些信息,发现这是由于PowerShell中的错误处理造成的(如果我没有弄错的话): 递归深度限制在版本1中是固定的。由于处理异常的方式,深度递归在64位模式下导致了问题。它导致了级联内存不足错误。最终的结果是,我们硬限制了所有平台上的递归深度,以帮助确保脚本可移植到所有平台。 -Bruce Payette,PowerShell的联合设计师 我找到了 此外,
- 在PowerShell V1中,最大呼叫深度为100:
System.Management.ExecutionContext
类代码中看到
internal int IncrementScopeDepth()
{
using (IDisposable disposable = tracer.TraceMethod("{0}", new object[] { this.scopeDepth }))
{
if (this.CurrentPipelineStopping)
{
throw new PipelineStoppedException();
}
this.scopeDepth++;
if (this.scopeDepth > 100)
{
ScriptCallDepthException exceptionRecord = new
ScriptCallDepthException(this.scopeDepth, 100);
tracer.TraceException(exceptionRecord);
throw exceptionRecord;
}
return this.scopeDepth;
}
}
无法修改硬编码的100
- 在PowerShell V2中,最大调用深度为1000
- 在PowerShell V3(CTP)中,似乎没有最大的调用深度(当然,除非资源耗尽)。此行为已在connect上进行过,因此在最终版本中可能会发生更改