Powershell - Ping Server Process с данными SQL - PullRequest
0 голосов
/ 09 мая 2018

У меня есть процесс, который получает список серверов из таблицы базы данных SQL. Оттуда этот список проходит цикл и выполняет тест ping. Сервер и результат теста ping отправляются обратно в ту же таблицу базы данных SQL, но обновляет столбец «IS_PINGABLE» результатом.

Следующий скрипт Powershell делает это, но очень медленно. Я взял часть кода отсюда: https://gallery.technet.microsoft.com/scriptcenter/Powershell-Script-to-ping-15e0610a и добавил некоторые другие шаги.

Если у кого-нибудь есть предложение сделать это быстрее, лучше, сильнее, пожалуйста, дайте мне знать ниже. Большое спасибо заранее.

$MasterServerConnString = dbserver,1433


#**********************************************************************
#region Get Server List
#Get Server list from SQL DB Table and save to temp Powershell table
#**********************************************************************

$ping_cmd = "Set NOCOUNT ON; SELECT distinct machinename, IS_PINGABLE FROM [DB].[dbo].[TABLE] order by 1"

$ping_cn = new-object System.Data.SqlClient.SqlConnection("Data Source=$MasterServerConnString;Integrated Security=SSPI;Initial Catalog=DB");
$ping_cn.Open()
            $ping_a = $ping_cn.CreateCommand()
            $ping_a.CommandText = $ping_cmd
            $ping_a = $ping_a.ExecuteReader()
            $ping = new-object “System.Data.DataTable” "computername"
            $ping.Load($ping_a)
$ping_cn.Close()

$Server = $ping.Item(0)

#**********************************************************************
#endregion

#**********************************************************************
#region Ping Sever Test
#Ping each server to see if there is connectivity.  If pingable, 1.  If not pingable 0.
#**********************************************************************

$PCData = foreach ($PC in $Server) {

    Write-Verbose "Checking computer'$PC'"
    try {
        Test-Connection -ComputerName $PC -Count 2 -ErrorAction Stop | Out-Null

        $Props = @{
            ComputerName   = $PC
            Status         = 1

        }
        New-Object -TypeName PSObject -Property $Props
    } catch { # either ping failed or access denied 
        try {
            Test-Connection -ComputerName $PC -Count 2 -ErrorAction Stop | Out-Null
            $Props = @{
                ComputerName   = $PC
                Status         = 0

            }
            New-Object -TypeName PSObject -Property $Props            
        } catch {
            $Props = @{
                ComputerName   = $PC
                Status         = 0

            }
            New-Object -TypeName PSObject -Property $Props              
        }
    }
}

#**********************************************************************
#endregion


#**********************************************************************
#region Upload Results
#Upload the ping results for each server back to the database table
#**********************************************************************

foreach ($sv in $PCData)
{

$svr_name = $sv.ComputerName
$svr_stat = $sv.Status


$Updatequery = " 
Update [DB].[dbo].[TABLE]
SET
IS_PINGABLE = $svr_stat
WHERE
MachineName = '$svr_name'
"

$A_cn = new-object System.Data.SqlClient.SqlConnection("Data Source=$MasterServerConnString;Integrated Security=SSPI;Initial Catalog=DB");
$A_cn.Open() 
        $command = $A_cn.CreateCommand()
        $command.CommandText = $Updatequery
        $result = $command.ExecuteReader()
$A_cn.Close()

}
#**********************************************************************
#endregion
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...