我想知道是否有可能创建每个案例超过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语句中,但这可以实现我的目标,但我认为这是不可能的

最佳答案

我认为你可以继续

switch -regex ($database)

-看看here

关于powershell - Powershell开关一对多关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11694601/

10-12 18:23