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