我想知道是否可以创建每个案例超过 1 个值的开关案例。我试图以不同的方式接受用户输入。菜单看起来像:
$database = Read-Host "[1] db 1 [2] db2 [3] db3 [4] ALL dbs"
然后根据用户在我的下一个读取主机中的响应,将其作为参数传递给 4 个不同的函数。在不制作大量案例的情况下,我希望能够接受所有可能的输入。即,如果用户想查看 2 个数据库,他们可以输入 32 或 23。如果他们想查看全部,它将接受 4、321、123、213... 目前我正在尝试通过以下方式完成此操作:
switch ($database) {
(4 -or 123 -or 312 -or ...) {#return all paths}
(12 -or 21) { #return 1st 2 db paths}
(31 -or 13) { #return 1st and last db paths}
(1) {#return 1st db path}
...
}
这会导致语法错误,因此它显然不起作用。如您所知,已经有很多案例(7)。如果我必须列出每一个选项,那将是两倍以上(16)。有没有办法在开关盒中创建一对多关联?如果没有,有没有人知道我可以采取的新方法来解决这个问题?
解决方案
switch -regex ($database)
{
"[*1*]" {"\\db1"}
"[*2*]" {"\\db2"}
"[*3*]" {"\\db3"}
"[4]" {"\\db1";"\\db2";"\\db3"}
default {Write-Host "Database(s) were not properly specified,
Please run the script again"
exit}
}
这实现了我的目标,虽然我从来不知道如何-or
在 switch 语句中放置条件,但我不相信这是可能的