如果主机名值介于500-549之间,我需要一种在服务器上启动服务的方法。
如果不在该范围内,则将启动其他服务。
我知道如何做到这一切,除了确定数字是否在500-549之间,因此包含最多499和550-999的值的服务器名称将启动其他服务。
因此,例如,期望的结果将是:
server 500 start service A
server 530 start service b
server 660 start service A
答案 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"
}
结果:
绘制时(在Excel中),我得到以下图表:
<强>结论强>
对于小范围,解决方案之间没有太大区别。
但是,由于较大范围的性能损失确实发生(从256个元素开始可测量),并且您可能不会影响范围的大小,并且范围可能因环境而异,我建议使用solution 1
。 当您无法控制范围的大小时,这也很重要。