Пинговать несколько IP-адресов параллельно и выводить в несколько файлов .TXT в Powershell - PullRequest
0 голосов
/ 01 апреля 2019

Я хочу пинговать постоянно (ping -t) 3 разных IP-адреса одновременно и экспортировать результат с отметкой времени в 3 различных файла .txt, но я не знаю, как пинговать 3 IP-адреса в parralel.

Скрипт работает, но создает только первый .txt файлЯ знаю, что первый пинг должен быть выполнен, чтобы перейти к следующему, потому что когда я "ping -n 1" (только один пинг), он создает 3 txt-файла, как и ожидалось.

Как я могу "ping -t "3 IP-адреса одновременно и экспортировать результат в 3 разных файла?

мой скрипт:

$enddate = (Get-Date).tostring("yyyyMMdd")
$IP1 = '192.168.1.1'
$IP2 = '192.168.1.2'
$IP3 = '192.168.1.3'
$IPs = $IP1,$IP2,$IP3

foreach ($IP in $IPs){
ping.exe -t $IP|Foreach{"{0} - {1}" -f (Get-Date),$_} | Out-File "C:\PINGS\$enddate _ $IP.txt"
}

в результате у меня будет 3 файла с результатами пинга внутри:

20190401_192.168.1.1.txt

20190401_192.168.1.2.txt

20190401_192.168.1.3.txt

Я новичок вкодирование.Я пытался с помощью командлета Start-Job пинговать одновременно, но у меня ничего не получается.

Не могли бы вы помочь мне с этим?

Спасибо заранее

1 Ответ

0 голосов
/ 02 апреля 2019

У меня другая проблема, но скрипт работает.Когда я запускаю сценарий из PowerShell ISE или из окна PowerShell с помощью команды. \ ScriptName.ps1, он создает файлы .txt, и я вижу задания.Но когда я запускаю .ps1, дважды щелкнув по нему, он не создает текстовые файлы и не выполняется никаких заданий.ПОЧЕМУ ???

Кстати, для моего сценария проверки связи я сделал 2 файла.

Первый запускает задание для другого .ps1

Файл 1:

#$date = Get-Date -Format yyyyMMdd
$IP1 = '192.168.1.1'
$IP2 = '192.168.1.2'
$IP3 = '192.168.1.3'
$IPs = $IP1,$IP2,$IP3
$LogPath = "C:\PINGS"
foreach ($IP in $IPs){
    Start-Job C:\PINGS\PingHost.ps1 -ArgumentList $IP,$LogPath
}

Файл 2:

[Cmdletbinding()]

Param(

    [Parameter(Mandatory = $true,
    Position = 0)]
    [String[]]$Hostnames,
    [Parameter(Mandatory = $true,
    Position = 1)]
    [String]$FilePath    
)

$date = Get-Date -Format yyyyMMdd

Foreach($hostname in $Hostnames) {
    $LogPath = $FilePath + "\$date" + "_" + "$hostname" + ".txt"
    ping.exe -t $hostname |Foreach{"{0} - {1}" -f (Get-Date),$_} | Out-File -LiteralPath $LogPath
} 

Спасибо моему другу.

Но он не знает, почему скрипт не работает, когда я выполняю его с двойного щелчкаили щелкните правой кнопкой мыши -> открыть с помощью -> powershell.

...