Пинговать несколько IP-адресов параллельно и выводить на несколько.Текстовые файлы в Powershell

#powershell #ip #ping #parallel.foreach #simultaneous

#powershell #ip #пинговать #parallel.foreach #одновременный

Вопрос:

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

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

Как я могу «пинговать» 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. Вы были на правильном пути с Start-Job. Можете ли вы опубликовать свой код для этого? Что не сработало?

Ответ №1:

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

Кстати, для моего скрипта пинга я сделал 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:PINGSPingHost.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.