【发布时间】:2018-04-25 22:18:06
【问题描述】:
我正在尝试创建一个脚本,该脚本将列出我需要列出的服务器以及从每个服务器返回的延迟,我需要根据 ping 将列表按升序或降序排列。
到目前为止,我想出的基本上已经给出了我想要的,但是如果在一台服务器上返回的 ping 高于 100,则如果其他值以高于 1 的值开始,则认为其他值更高。
我知道我需要以整数形式返回的 ping 值,但我无法弄清楚如何在不删除服务器名称的情况下准确地完成此操作。
不管怎样,这就是我到目前为止的想法
function TestNetwork {
$global:array = @("<ServerName>:<ipaddress>"; "<ServerName>:<ipaddress>"; "<ServerName>:<ipaddress>")
foreach ($str in $global:array) {
$avg = 0
$server = $($str -split ":")[0]
$PingServer = Test-Connection -Count 3 $server
$avg = ($PingServer | Measure-Object ResponseTime -Average)
$calc = [System.Math]::Round($avg.Average)
$output = "{000} | " -f $($calc) + $server
$Output
}
}
TestNetwork | Sort numerical -Descending `
这是我得到的结果
75 |服务器 73 |服务器 110 |服务器【问题讨论】:
-
您应该使用 CustomObject 输出结果,而不是将数字格式化为字符串。
-
使用不同的字符串格式运算符右对齐数字
$output = "{0,3} | " -f $($calc) + $server -
或者在排序的时候让RegEx do the padding left on the fly
TestNetwork | Sort-Object -desending { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }
标签: powershell sorting