#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.