切换语句不处理

时间:2017-07-05 19:55:42

标签: powershell switch-statement

我正在尝试使用switch语句控制PowerShell脚本中的流,但根本没有处理该开关。如果我以交互方式运行它(在ISE中突出显示+ F8),它可以毫无障碍地运行。我验证了这个论点,并对其进行了彻底的测试。 If(){}语句处理正常。 switch语句有什么奇怪的错误吗?即使是Default参数也没有被触发。

[CmdletBinding()]
Param(
    [Parameter(Mandatory=$True)]
    [ValidateSet('Install','Uninstall','Verify','Enable','Disable')]
    [String]$Switch
)

**FUNCTIONS**

[Int]$R = 324
Start-Transcript 'Path\ESD.log' -Append -Force

Switch ($Switch)
{
    "VERIFY"    { $R = Verify;    Break }
    "INSTALL"   { $R = Install;   Break }
    "UNINSTALL" { $R = Uninstall; Break }
    "ENABLE"    { $R = Enable;    Break }
    "DISABLE"   { $R = Disable;   Break }
    Default { Write-Host "Unable to match: $Switch" -BackgroundColor Red }
}

Write-Host "Exiting with: $R"
Stop-Transcript
EXIT $R

输出:

PS Path\EnterpriseSiteDiscovery> .\ESD verify
Transcript started, output file is Path\ESD.log
Exiting with: 324
Transcript stopped, output file is Path\ESD.log

PS Path\EnterpriseSiteDiscovery> $LASTEXITCODE
324

日志内容:

**********************
Windows PowerShell transcript start
Start time: 20170705154435
**SYSTEMINFO**
**********************
Transcript started, output file is Path\ESD.log
Exiting with: 324
**********************
Windows PowerShell transcript end
End time: 20170705154436
**********************

1 个答案:

答案 0 :(得分:1)

  

当你在Switch构造中时,变量就是这样   $ switch值被重新定义(可能是由switch开关构造本身)   作为System.Collections.IEnumerator类型的空变量。价值   设置为$ null。如果您不使用,这将不会是一个问题   变量名为$ Switch。不幸的是,因为我是   使用一套虚拟交换机,所以$ Switch看起来很公平   变量名的选择。