Массовое тест-соединение PowerShell - PullRequest
0 голосов
/ 06 сентября 2018

Что ж, у меня проблема с функцией Test-Connection в PowerShell. У меня есть CSV-файл со столбцами Server name и IPAddress. Мне нужно создать отчет о соединении с информацией Имя сервера , IP-адрес , Результат . Как я могу добавить информацию о столбце имени сервера?

Мой текущий код выглядит так:

$Report = @()
$Servers = Import-CSV "C:\skrypt\bobi\servers.csv"  -Delimiter ';'
foreach ($Server in $Servers) {
    if ($Alive = Test-Connection -ComputerName $Server.IPAddress -Count 1 -quiet) {
        $TestResult = New-Object psobject -Property @{
            IPAddress = $Server.IPAddress
            Result    = "Online"
        }
    }
    else {
        $TestResult = New-Object psobject -Property @{
            IPAddress = $Server.IPAddress
            Result    = "Offline"
        }
    }
    $Report += $TestResult
}       
$Report | Select-Object IPAddress, Result | Export-Csv C:\skrypt\bobi\Report.csv -nti

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Если в вашем CSV-файле есть столбец с именами хостов , вам необходимо изменить PSCustomObject на:

$TestResult = New-Object psobject -Property @{
    IPAddress = $Server.IPAddress
    HostName = $Server.HostName #assuming column name is "HostName"
    Result    = "Result"
}

В случае, если в вашем CSV-файле нет столбца с именами хостов , вам необходимо запросить класс System.Net.Dns с его методом GetHostByAddress. Вот так:

$TestResult = New-Object psobject -Property @{
    IPAddress = $Server.IPAddress
    HostName = $([System.Net.Dns]::GetHostByAddress($Server.HostName).HostName -join ';')
    Result    = "Result"
}

В обоих случаях вам понадобится передать свойство HostName для экспорта файла csv

$Report | Select-Object IPAddress, HostName, Result | Export-Csv C:\skrypt\bobi\Report.csv -nti
0 голосов
/ 06 сентября 2018

Я думаю, что это может помочь вам:

$Servers = @(
    [PSCustomObject]@{
        'Server Name' = 'Server1'
        IPAddress = '10.10.10.10'
    }
    [PSCustomObject]@{
        'Server Name' = 'Wrong'
        IPAddress = '10.10.10.999'
    }
    [PSCustomObject]@{
        'Server Name' = 'Server2'
        IPAddress = '10.10.10.15'
    }
)

$Report = foreach ($Server in $Servers) {
    # First we collect all details we know in an object
    $Result = [PSCustomObject]@{
        Name   = $Server.'Server Name'
        IP     = $Server.IPAddress
        Online = $false
    }

    # Then we do the test
    if (Test-Connection -ComputerName $Server.IPAddress -Count 1 -Quiet) {
        # If the connection is successful, we set it to True
        $Result.Online = $true    
    }

    # As a last step we return the complete object
    # where it is collected in the array of Report
    $Result
}

$Report | Select-Object Name, IP, Online
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...