Вы можете использовать Test-Connection
для этого. Вот один из способов, с небольшими изменениями, чтобы получить дополнительную информацию, которую вы хотите:
Test-Connection -ComputerName $servers -Delay 1 -Count 60 |
Add-Member -MemberType NoteProperty -Name Date -Value (Get-Date) -PassThru |
Add-Member -MemberType NoteProperty -Name Status -Value $(if($_.ResponseTime -gt 5){"Failed"}else{"Succeeded"}) -PassThru
Это будет пинговать каждый сервер в $servers
один раз в секунду в течение 60 секунд и выводить стандартные объекты с двумя новыми свойства: Date
(datetime of ping) и Status
(удалось или не удалось?)
Вы можете их захватить, отобразить на экране или отправить в файл. Например, чтобы записывать данные, сохраняя их в CSV, вы можете просто добавить следующее:
| Export-Csv .\ping.csv
CSV будет содержать больше информации, чем вам нужно, так что вы можете
EDIT: отображение пользовательских свойств
. Чтобы просмотреть пользовательские свойства в консоли, выполните следующие действия: , добавьте следующее:
| Format-Table PsComputerName, Date, ResponseTime, Status
Вот рефакторинг, который удаляет повторяющийся код и делает ваш скрипт совместимым с sh
в качестве приятного бонуса.
#!/bin/sh
while read num seed; do
sed "s/seed=0/seed=$seed/" input >"input$num"
./compiled_code <"input$num" > "output$num"
rm "input$num"
done <<____HERE
1 100
2 200
3 300
: etc
____HERE
Если, как кажется, ваши начальные значения полностью предсказуемы, то sh
-совместимая замена для вашего цикла for
состоит в использовании внешней утилиты, такой как seq
(хотя это не совсем POSIX либо).
for num in $(seq 1 20); do
sed "s/seed=0/seed=${num}00/" input >"input$num"
./compiled_code <"input$num" > "output$num"
rm "input$num"
done