У меня есть задача, которая выполняет обратный поиск DNS около 50-60 возможных устройств.Ни в коем случае не будет генерироваться агрегированное исключение.
То, что у меня, похоже, работает, если вы просто выходите из консоли (без красного текста), но исключение все еще можно найти в переменной $ Error,
Мне пока не удалось найти пример использования метода Handle в PowerShell.
Я ухожу из примеров, полученных по следующей ссылке, но я не оченьзнакомы с C # или VB.У меня может быть проблема с переводом в PowerShell.
https://msdn.microsoft.com/en-us/library/system.aggregateexception.handle(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-3
Что мне интересно, так это ... Где я ошибся или действительно обработано исключение?
Ниже приведен код, который должен продемонстрировать причину моего затруднения.Это создаст задачу, состоящую из 3-х асинхронных обратных DNS-запросов, которые должны дать сбойВызов WaitAll должен вызвать ожидаемые агрегатные исключения и, по-видимому, быть обработанным, но все еще наблюдается в $ Error.
$Task = @('testComp1','testComp2','testComp3') | ForEach-Object {
[pscustomobject]@{
Computername = $_
Task = [System.Net.DNS]::GetHostAddressesAsync($_)
}
}
try
{
[Void][Threading.Tasks.Task]::WaitAll($Task.Task)
}
catch [System.AggregateException]
{
$_.Exception.Handle({
param($ex)
if ( $ex.GetType().Name -eq 'SocketException' ) {
Write-Host 'Expected SocketException'
return $true
} else {
return $false
}
})
}
$Error[0]