如何简化含多组连续匹配项的PowerShell switch语句
简化PowerShell连续匹配的Switch语句
PowerShell里可以用**范围运算符..**生成连续数字,配合字符串格式化快速创建你需要的PC名称列表,不用手动逐个输入。
核心方法说明
- 生成连续数字:
1..9会输出1到9的整数序列,10..19对应10到19,以此类推 - 格式化带前导零的字符串:
"{0:D3}" -f $数字可把数字转成三位带前导零的格式(比如1→"001",10→"010") - 拼接前缀:将"pc"和格式化后的字符串拼接,得到完整PC名称
简化后的Switch代码
# 预先生成各楼层的PC名称集合 $floor1PCs = 1..9 + 20..29 | ForEach-Object { "pc{0:D3}" -f $_ } $floor2PCs = 10..19 | ForEach-Object { "pc{0:D3}" -f $_ } switch ($env:COMPUTERNAME) { { $_ -in $floor1PCs } { Write-Output 'These PC are located at the 1st floor.' break } { $_ -in $floor2PCs } { Write-Output 'These PC are located at the 2nd floor.' break } default { Write-Output 'Unknown location.' break } }
紧凑写法(直接在条件中生成)
如果不想单独定义变量,也可以把生成逻辑直接嵌入Switch条件块:
switch ($env:COMPUTERNAME) { { $_ -in (1..9 + 20..29 | ForEach-Object { "pc{0:D3}" -f $_ }) } { Write-Output 'These PC are located at the 1st floor.' break } { $_ -in (10..19 | ForEach-Object { "pc{0:D3}" -f $_ }) } { Write-Output 'These PC are located at the 2nd floor.' break } default { Write-Output 'Unknown location.' break } }
后续调整PC范围时,只需修改数字区间即可,不用手动添加大量字符串,维护更便捷。
内容的提问来源于stack exchange,提问作者Livy
相关产品推荐
相关产品推荐

