在RunWithElevatedPrivileges内部,foreach continue不起作用

时间:2018-05-31 10:38:27

标签: powershell sharepoint

下面的代码在出现错误时继续执行,

    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
            }
        }
  });

1 个答案:

答案 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。

     

继续:显示调试消息并继续执行。

     

静默持续:没有效果。调试消息未显示(默认),并且继续执行而不会中断。