我正在尝试根据以毫秒为单位的延迟在 powershell 中将线条着色为绿色、黄色和红色。我们的远程工作流规定任何超过 40 毫秒的东西都是不好的,所以我希望将其直观地呈现给运行测试的人,并将其打包为 exe,供他们在需要时下载和运行。
- 1-19ms = 绿色
- 20-39ms = 黄色
- 40-500 毫秒 = 红色
- “请求超时”=红色
但是,当我尝试在 ISE 中记录它时,它似乎没有按预期运行。它通常只为所有线路返回一种纯色,有时它会在跟踪路由测试中完全错过一些线路。我特意选择了一个随机的澳大利亚 IP 地址来运行测试,因为它距离很远,并且随着跃点的继续,应该会提供低延迟到高延迟的良好组合。
谁能建议我可能哪里出错了?
$traceroute = tracert 47.74.90.56
foreach ($trace in $traceroute)
{
if ($trace -Match '[1-9] ms' )
{
write-host "$trace" -ForegroundColor green
}
elseif ($trace -Match 'request timed out' )
{
write-host "$trace" -ForegroundColor red
}
elseif ($trace -Match '[1-0][1-9] ms' )
{
write-host "$trace" -ForegroundColor green
}
elseif ($trace -Match '[2-3][0-9] ms' )
{
write-host "$trace" -ForegroundColor yellow
}
elseif ($trace -Match '[4-9][0-9] ms' )
{
write-host "$trace" -ForegroundColor red
}
elseif ($trace -Match '[1-9][0-9][0-9] ms' )
{
write-host "$trace" -ForegroundColor red
}
}
您的正则表达式模式的开头需要一个空格。否则,这一行几乎总是匹配:
在较新版本的 powershell 中,此行将出错,因为
[1-0]
顺序相反:我还建议使用
switch
这样的比较,但只是为了可读性:elseif ($trace -Match '[1-0][1-9] ms' )
-- [1-0] 是倒退的,不被接受。<1 ms
,如果输出被转换为整数并进行比较。