foreach continue не работает, когда внутри RunWithElevatedPrivileges - PullRequest
0 голосов
/ 31 мая 2018

Ниже код продолжает выполняться при возникновении ошибки,

    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 голосов
/ 31 мая 2018

Это может быть связано с тем, указали ли вы ErrorAction или нет, но я не уверен, как это относится к попытке catch, хотя.Я сделал что-то подобное, где мой foreach не остановился бы, если явно не указано.

В основном вам нужно указать, что должно произойти, если при каждом вызове происходит ошибка, как, например,

Call-Something $SomeParam -ErrorAction Stop

вы указываете его, как указано выше, для каждого вызова или в начале вашего скрипта, поскольку нижеуказанные ошибки могут игнорироваться.

// at the start of your script
$ErrorActionPreference = "Stop"

Для получения дополнительной информации вы можете прочитать об ErrorAction в powershell, например, https://blogs.msdn.microsoft.com/kebab/2013/06/09/an-introduction-to-error-handling-in-powershell/

И в соответствии с msdn это допустимые значения:

Stop: отображает сообщение об отладке и прекращает выполнение.Записывает сообщение об ошибке в консоль.

Запрос: отображает сообщение об отладке и спрашивает, хотите ли вы продолжить.Обратите внимание, что добавление общего параметра Debug к команде - когда команда настроена на создание сообщения отладки - изменяет значение переменной $ DebugPreference на Inquire.

Continue: отображает сообщение отладки и продолжает свыполнение.

SilentlyContinue: без эффекта.Отладочное сообщение не отображается (по умолчанию), и выполнение продолжается без прерывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...