下面的代码在出现错误时继续执行,
foreach($url in Get-Content $urlsDir)
{
try
{
// do something
// declare X
}
catch
{
// write host or soemthing with exception
continue
}
finally
{
// dispose X
}
}
但是当我将此代码放在RunWithElevatedPrivileges中时,它会在第一次错误时完全停止并且不会继续执行,
[Microsoft.SharePoint.SPSecurity]::RunWithElevatedPrivileges({
# Iterate through all webs in a text file
foreach($url in Get-Content $urlsDir)
{
try
{
// do something
// declare X
}
catch
{
// write host or soemthing with exception
continue
}
finally
{
// dispose X
}
}
});
答案 0 :(得分:0)
这可能与您是否指定了ErrorAction有关,我不确定这与try catch有何关系。我做过类似的事情,除非明确说明,否则我的foreach不会停止。
基本上,您需要指定每次调用时发生错误时应该发生的事情,如此
Call-Something $SomeParam -ErrorAction Stop
除非您为每次调用或脚本开头指定如上所示,否则错误可以被忽略。
// at the start of your script
$ErrorActionPreference = "Stop"
有关详细信息,请参阅PowerShell中的ErrorAction https://blogs.msdn.microsoft.com/kebab/2013/06/09/an-introduction-to-error-handling-in-powershell/
根据msdn,这些是有效值:
停止:显示调试消息并停止执行。将错误写入控制台。
查询:显示调试消息并询问您是否要继续。请注意,将Debug公共参数添加到命令中 - 当命令配置为生成调试消息时 - 将$ DebugPreference变量的值更改为Inquire。
继续:显示调试消息并继续执行。
静默持续:没有效果。调试消息未显示(默认),并且继续执行而不会中断。