Я работаю над скриптом PowerShell для преобразования журнала ping в данные диаграммы.Операция медленного массива в Powershell
Скрипт работает нормально, но работает очень медленно, вызванный операциями массива.
Если сценарий, выполняемый в файле строки 10k, занимает около 7 секунд. Если операция массива удалена, то для завершения требуется меньше секунды.
Я ищу альтернативное решение для возврата данных к функции вызывающего абонента без использования временного массива.
Пример логе ввода:
02.01.2017-14:53:54> Reply from 8.8.8.8: bytes=32 time=184ms TTL=57
02.01.2017-14:53:54> Reply from 8.8.8.8: bytes=32 time=18ms TTL=57
02.01.2017-14:53:59> Request timed out.
02.01.2017-14:54:01> Reply from 192.168.2.186: Destination host unreachable.
02.01.2017-14:54:05> Request timed out.
02.01.2017-14:54:07> Reply from 192.168.2.186: Destination host unreachable.
Сценарий:
function Convert-V4PingLog2ChartData
{
param($V4PingLogFile, $AvarageRespondTime, $ChartCounter)
$ConvertedData=""
$var=Get-Content $V4PingLogFile
$varArray=$var.split("`n")
$varArray=$varArray | Select-Object -Skip 2
$CommandExecuteTime=Measure-Command{
$pattern = "^([0-9]{2})\.([0-9]{2})\.([0-9]{4})-([0-9]{2}):([0-9]{2}):([0-9]{2})> Reply from [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}: bytes=32 time=([0-9]{1,4})ms TTL=[0-9]{1,3}$";
$pattern2="^([0-9]{2})\.([0-9]{2})\.([0-9]{4})-([0-9]{2}):([0-9]{2}):([0-9]{2})> (Request timed out.|Reply from [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}: Destination host unreachable.)$"
foreach($nextLine in $varArray)
{
if($nextLine -like "* time=*")
{
$ConvertedData+=$nextLine -replace $pattern, "data$ChartCounter.addRow([new Date(`$3, `$2, `$1, `$4, `$5, `$6, 00), `$7, $AvarageRespondTime]);"
}
else
{
$ConvertedData+=$nextLine -replace $pattern2, "data$ChartCounter.addRow([new Date(`$3, `$2, `$1, `$4, `$5, `$6, 00), 0, $AvarageRespondTime]);"
}
}
}
Write-Host $CommandExecuteTime
return $ConvertedData
}
Спасибо, он отлично работает – Krisz
Thats a nice ansgar :) –