PowerShell Switch语句 - switch语句子句中缺少语句块错误

时间:2015-03-06 20:28:46

标签: powershell switch-statement

我有一个PowerShell脚本,用于抓取文件数据并生成校验和脚本(也称为PowerShell),我们用它来验证软件部署中的UI更改。

我在此脚本中插入了一个switch语句,以识别我运行此生成脚本的服务器类型,并相应地命名所生成的校验和文件。它通过检查这些服务器上标识服务器类型(Alpha,Beta等)的注册表项值来实现。交换机名称是这些注册表项值的名称。

使用此switch语句,我收到Missing statement block in switch statement clause错误。

我在PowerShell ISE中查看此脚本时注意到的是,2008(深紫色)和_Server_Alpha(浅紫色)之间存在颜色差异,就像切换一样名称以数字开头还是下划线将其丢弃?如果我注释掉那两个开关,只剩下默认值,那就很好了。

$serverkey = 'HKLM:\SOFTWARE\CompanyName'
$servertype = (Get-ItemProperty $serverkey "Server Type")."Server Type"

$file = switch ($servertype)
{
2008_Server_Alpha {"\\server\AppChecksum_Alpha.ps1"}
2008_Server_Beta {"\\server\AppChecksum_Beta.ps1"}
default {"\\server\New_AppChecksum.ps1"}
}

然后在脚本的最后我有out-file $file,它会调用此开关来查看如何输出生成的文件。

我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:0)

它适用于我的机器。我刚给$servertype分配了一个硬编码字符串来测试它。

另一种方法是使用哈希表来查找每种服务器类型的值。它并不短,但更直观:

$servertype = '2008_Server_Alpha'

$servertypes = @{'2008_Server_Alpha' = '\\server\AppChecksum_Alpha.ps1'
                 '2008_Server_Beta' = '\\server\AppChecksum_Beta.ps1'}

# look up the value for this servertype if there is one
if ($servertypes.Contains($servertype)) {
    $file = $servertypes[$servertype]
} else {
    $file = '\\server\New_AppChecksum.ps1'
}