如果主机名值在500-549之间,我需要一种在服务器上启动服务的方法.
如果不在该范围内,则将启动其他服务.
我知道如何做到这一切,除了确定数字是否在500-549之间,因此包含值高达499和550-999的服务器名称将启动其他服务.
例如,期望的结果将是:
server 500 start service A
server 530 start service b
server 660 start service A
Run Code Online (Sandbox Code Playgroud)
nix*_*xda 20
使用-In运算符并使用定义范围..
$a = 200
$a -In 100..300
Run Code Online (Sandbox Code Playgroud)
作为奖励:这也有效.在这里,PowerShell以静默方式将字符串转换为整数
$a = "200"
$a -In 100..300
Run Code Online (Sandbox Code Playgroud)
两个例子的输出是
True
Run Code Online (Sandbox Code Playgroud)
Kei*_*ill 10
如果服务器名称实际上只是一个数字,那么:
$num = [int]$serverName
if ($num -ge 500 -and $num -le 549) {
... do one thing
}
else {
... do another
}
Run Code Online (Sandbox Code Playgroud)
作为对两个 答案的答复 ; 代码的清晰度和性能都至关重要,因此我进行了一些测试。与所有基准测试一样,您的结果可能会有所不同。我只是以此做为快速测试。
解决方案1
(($value -ge $lower) -and ($value -le $upper))
Run Code Online (Sandbox Code Playgroud)
解决方案2
$value -In $lower .. $upper
Run Code Online (Sandbox Code Playgroud)
测试
$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"
}
Run Code Online (Sandbox Code Playgroud)
结果:
绘制时(在Excel中),我得到以下图:
结论
对于小范围,解决方案之间没有太大差异。但是,由于确实发生了较大范围的性能下降(从256个元素开始可测量),并且您可能对范围的大小没有影响,并且范围可能因环境而异,我建议使用solution 1。当您不控制范围的大小时,这也很重要。
| 归档时间: |
|
| 查看次数: |
25943 次 |
| 最近记录: |