【发布时间】:2019-01-25 16:20:38
【问题描述】:
如何在 PowerShell switch 语句中添加条件?下面的代码在应该返回 1000 时返回 0。
$UsedSpaceMB = 8500
switch ($UsedSpaceMB) {
($UsedSpaceMB -gt 15000) { $FreeSpace = 2000 }
($UsedSpaceMB -in 8000..15000 ) { $FreeSpace = 1000 }
($UsedSpaceMB -in 1700..8000 ) { $FreeSpace = 500 }
($UsedSpaceMB -in 1000..1700 ) { $FreeSpace = 200 }
($UsedSpaceMB -in 800..1000 ) { $FreeSpace = 100 }
($UsedSpaceMB -lt 800 ) { $FreeSpace = 50 }
}
$FreeSpace
【问题讨论】:
-
这段代码的用例是什么?您是否将
-in视为某种 betweens 运算符?如果$UsedSpaceMB是小数,这将不起作用。我认为使用$FreeSpace=switch($UsedSpaceMB){($_ -gt 15000){2000;break};($_ -gt 8000){1000;break}}之类的东西会更好。因此,成功的第一个条件返回您的号码,然后我们使用 break 来确保不会满足其他条件。8000..15000正在制作一个数组,您制作完成后立即丢弃。如果频繁运行,可能会影响性能。 -
感谢@Matt 好点
-
按照编码,您试图将数字与布尔值进行比较,但它从未匹配过。如果您使用我在多种语言中看到的常见习语,该代码会起作用:
switch ($true){...在我看来,它使代码比 Persistent13 建议的 {} 表达式语法更具可读性。