选择多个switch语句

时间:2014-07-02 14:28:58

标签: powershell powershell-ise

我有下面的脚本,让我在不同的元素之间切换,并逐个运行它们中的函数。

但我现在需要做的就是让它可以选择多个并让它们在它们之间运行和暂停以验证是否正确加载了东西。因此,我不会遇到必须重新运行完整脚本并重做同一个脚本的问题。

有人能告诉我怎么做吗?我很遗憾如何完成并正常工作。

write-host "Sets up location you want to run staging"
$ElementDistro = Read-Host -Prompt "Which Element do you want to run? (TV30/TV30BP/TV30LM/TV30PV/LT101/XR2/MU11/SAP)"
while ($ElementDistro -notmatch "^(TV30|TV30BP|TV30LM|TV30PV|LT101|XR2|MU11|SAP)$")
{
    write-host "you have enterd an error" -ForegroundColor Red
    write-host "You must type TV30 or TV30BP or TV30LM or TV30PV or LT101 or XR2 or MU11 or SAP"
    write-host "you typed $ElementDistro"
    write-host "set location you want to run staging"
    $ElementDistro = Read-Host -Prompt "Which Element do you want to run? (TV30/TV30BP/TV30LM/TV30PV/LT101/XR2/MU11/SAP)"
}

switch ($ElementDistro)
{
    'TV30'
    {
        # Do TV30 Stuff
        write-host "you have entered TC TV30"
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        $source = Select-TC
        $destination = 'Desktop'
        "Calling Copy-Item with parameters source: '$source', destination: '$destination'."
        Copy-Item -Path $source -Destination $destination
        exit-pssession
        break
    }

    'TV30BP'
    {
        # Do TV30BP Stuff
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        $source = Select-TC
        $destination = 'Desktop'
        "Calling Copy-Item with parameters source: '$source', destination: '$destination'."
        Copy-Item -Path $source -Destination $destination
        # exit-pssession
        break
    }

    'TV30LM'
    {
        # Do TV30LM stuff
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        $source = Select-TC
        $destination = 'Desktop'
        "Calling Copy-Item with parameters source: '$source', destination: '$destination'."
        Copy-Item -Path $source -Destination $destination
        exit-pssession
        break
    }

    'TV30PV'
    {
        # Do TV30PV stuff
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        $source = Select-TC
        $destination = 'Desktop'
        "Calling Copy-Item with parameters source: '$source', destination: '$destination'."
        Copy-Item -Path $source -Destination $destination
        exit-pssession
        break
    }

    'LT101'
    {
        # Do LT101 stuff
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        break
    }

    'XR2'
    {
        # Do XR2 stuff
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        break
    }

    'MU11'
    {
        # Do TF10 stuff
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        break
    }

    'SAP'
    {
        # Do SAP stuff
        $passwd = convertto-securestring -AsPlainText -Force -String ''
        $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "",$passwd
        $session = enter-pssession -computername '' -credential $cred
        break
    }
}
break
}

2 个答案:

答案 0 :(得分:1)

快速回答是Powershell的switch语句接受一个输入数组。如果在每个switch case的末尾省略break语句,它将执行每个匹配的case。输入您的选择作为逗号分隔列表,并使用split语句将它们放入数组中。

您的$ Choices数组中的每个选项都将被执行。如果你将一个Pause语句放在break语句中,你可以在每个步骤完成时暂停。

$Choices = @('TV30','MU11')
switch ($Choices)
{
'TV30' {some code}
'TV30BP' {some code}
'MU11' {some code}
}

答案 1 :(得分:1)

如果您至少获得了V3,则可以使用Out-GridView和-OutPutMode Multiple作为菜单从以下选项中选择多个项目:

$Menu = 'TV30','TV30BP','TV30LM','TV30PV','LT101','XR2','MU11','SAP','ALL'

$Choices = $Menu | Out-GridView -OutputMode Multiple -Title 'Select Locations you want to run staging, and click OK.'

Switch ($Choices)
{ 
  .....