Если вы хотите продолжить обработку своего скрипта при выполнении действий, основанных на типе ошибки, простой способ - просто изучить переменную $error
.Использование Trap также может быть опцией.
$error.clear()
New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory"
if ($error[0].Exception.GetType().Fullname -eq 'System.IO.IOException') {
"Dir Exists"
}
else {
"Dir was created"
}
Если вы хотите использовать try-catch, вам нужно рассматривать вашу нескончаемую ошибку как завершающую ошибку, чтобы активировать блок catch.Вы можете сделать это с помощью -ErrorAction Stop
.
try {
New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory" -ErrorAction Stop
}
catch [System.IO.IOException]
{
"Exception caught!"
}
В качестве альтернативы вы можете управлять этим в своем сеансе, установив $ErrorActionPreference = 'Stop'
, который будет применяться ко всем командам в этом сеансе.
Сохранитьпомните, что значение, переданное -ErrorAction
, переопределяет настройку в $ErrorActionPreference
.Кроме того, настройки действий при ошибках не влияют на устранение ошибок.Таким образом, вы не можете ожидать установки -ErrorAction Continue
и продолжать обработку кода при ошибке завершения.
Многие команды возвращают объекты, которые могут или не могут быть ошибками завершения.Вы найдете больше успеха в явном виде, указав, когда вы хотите выдать завершающую ошибку.
Подробнее о предпочтении действия при ошибке можно узнать по адресу Об общих параметрах .Мне действительно нравится Все об исключениях для обработки исключений в PowerShell.