Как избежать ненужного вывода из [System.Net.Dns] :: GetHostAddresses ("$ server_name") - PullRequest
0 голосов
/ 25 февраля 2019
$inventory = Import-Csv "E:\MonitoringScripts\HealthCheck\PatStat_Pshell\inventory.csv"
foreach ($line in $inventory) {
    $server_name = $($line.servername)
    $port_number = $($line.port)
    $resolved_true = [System.Net.Dns]::GetHostAddresses("$server_name") 
    #Write-Host $resolved_true
    if ($resolved_true) {
        #Write-Host $server_name
        Write-Host 'the host is resolving'
    } else {
        Write-Host 'Not found in DNS'
    }
}

В приведенном выше коде, как я могу избежать отображения приведенного ниже содержимого в командной строке, если в файле инвентаризации есть хост, который не разрешает DNS?

Exception calling "GetHostAddresses" with "1" argument(s): "No such host is
known"
At E:\MonitoringScripts\HealthCheck\PatStat_Pshell\patrol.ps1:9 char:2
+     $resolved_true = [System.Net.Dns]::GetHostAddresses("$server_name")
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SocketException

Not found in DNS
the host is resolving

Iпросто хочу увидеть:

Not found in DNS

или

the host is resolving

Ответы [ 4 ]

0 голосов
/ 25 февраля 2019
$inventory = import-csv “E:\MonitoringScripts\HealthCheck\PatStat_Pshell\inventory.csv”
ForEach ($line in $inventory)
{
    $server_name = $($line.servername)
    $port_number = $($line.port)
    $resolved_true = $null
    try {
    $resolved_true = [System.Net.Dns]::GetHostAddresses($server_name) 
    } catch {
    $resolved_true = $null
    }
    #Write-host $resolved_true
    if($resolved_true) {
        #write-host $server_name
        Write-Host 'the host is resolving'
    } else {
        Write-Host 'Not found in DNS'
    }
}

Это сработало для меня, Большое спасибо всем за помощь.Мне придется пометить @JosefZ. Ответ, но большое спасибо всем вам.

0 голосов
/ 25 февраля 2019

Поймай исключение:

try {
    [Net.Dns]::GetHostAddresses($server_name)
    Write-Host 'the host is resolving'
} catch {
    Write-Host 'Not found in DNS'
}
0 голосов
/ 25 февраля 2019

Чтение О Try Catch finally :

Используйте блоки Try, Catch и finally для ответа или обработки завершающих ошибок в сценариях.

Вы можете применить его следующим образом:

try {
    $resolved_true = [System.Net.Dns]::GetHostAddresses($server_name)
} catch {
    $resolved_true = $null
}
0 голосов
/ 25 февраля 2019

Test-Connection, чтобы увидеть, существует ли хост в первую очередь.Конечно, существующий хост - это не то же самое, что найти его в DNS.

$inventory = import-csv “E:\MonitoringScripts\HealthCheck\PatStat_Pshell\inventory.csv”
ForEach ($line in $inventory)
{
    $server_name = $($line.servername)
    $port_number = $($line.port)
    $resolved_true = $null
    if (Test-Connection -ComputerName $server_name -ErrorAction SilentlyContinue) {
        $resolved_true = [System.Net.Dns]::GetHostAddresses("$server_name")
    }
    #Write-host $resolved_true
    if($resolved_true) {
        #write-host $server_name
        Write-Host 'the host is resolving'
    } else {
        Write-Host 'Not found in DNS'
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...