Private/Test-EFDnsResolution.ps1
|
function Test-EFDnsResolution { [CmdletBinding()] param( [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [string]$HostName, [ValidateRange(100, 30000)] [int]$TimeoutMilliseconds = 3000 ) $checkScript = { param($InputData) try { $addresses = @([Net.Dns]::GetHostAddresses([string]$InputData.HostName)) [pscustomobject]@{ Resolved = $addresses.Count -gt 0 FailureReason = if ($addresses.Count -gt 0) { 'None' } else { 'NoRecords' } IsEvaluationError = $false } } catch [Net.Sockets.SocketException] { $socketError = $_.Exception.SocketErrorCode $isDefiniteMissingName = $socketError -in @( [Net.Sockets.SocketError]::HostNotFound, [Net.Sockets.SocketError]::NoData ) [pscustomobject]@{ Resolved = $false FailureReason = if ($isDefiniteMissingName) { 'NameNotFound' } else { [string]$socketError } IsEvaluationError = -not $isDefiniteMissingName } } } $absoluteHostName = $HostName.TrimEnd([char]'.') + '.' Invoke-EFIsolatedCheck -ScriptBlock $checkScript -InputData @{ HostName = $absoluteHostName } ` -TimeoutMilliseconds $TimeoutMilliseconds -StartupAllowanceMilliseconds 3000 ` -Activity 'The DNS resolution check' } |