如何判断数字是否在PowerShell的范围内

时间:2014-04-30 22:25:07

标签: powershell

如果主机名值介于500-549之间,我需要一种在服务器上启动服务的方法。

如果不在该范围内,则将启动其他服务。

我知道如何做到这一切,除了确定数字是否在500-549之间,因此包含最多499和550-999的值的服务器名称将启动其他服务。

因此,例如,期望的结果将是:

server 500 start service A
server 530 start service b
server 660 start service A

3 个答案:

答案 0 :(得分:18)

使用-In运算符并使用..

定义范围
$a = 200
$a -In 100..300

作为奖励:这也有效。在这里,PowerShell以静默方式将字符串转换为整数

$a = "200"
$a -In 100..300

两个例子的输出都是

True

答案 1 :(得分:10)

如果服务器名称实际上只是一个数字,那么:

$num = [int]$serverName
if ($num -ge 500 -and $num -le 549) {
    ... do one thing
}
else  {
    ... do another
}

答案 2 :(得分:5)

作为对both answers的回复;代码清晰度和性能都很重要,所以我做了一些测试。与所有基准测试一样,您的结果可能会有所不同;我只是做了一个快速测试..

解决方案1 ​​

(($value -ge $lower) -and ($value -le $upper))

解决方案2

$value -In $lower .. $upper

<强>测试

$value = 200
$lower = 1

for ($upper = $lower; $upper -le 10000000; $upper += $upper) {
    $a = Measure-Command { (($value -ge $lower) -and ($value -le $upper)) } | Select -ExpandProperty Ticks
    $b = Measure-Command { ($value -in $lower .. $upper) } | Select -ExpandProperty Ticks
    "$value; $lower; $upper; $a; $b"
}

结果:

Enter image description here

绘制时(在Excel中),我得到以下图表:

Enter image description here

<强>结论

对于小范围,解决方案之间没有太大区别。 但是,由于较大范围的性能损失确实发生(从256个元素开始可测量),并且您可能不会影响范围的大小,并且范围可能因环境而异,我建议使用solution 1当您无法控制范围的大小时,这也很重要。