我有一个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
,它会调用此开关来查看如何输出生成的文件。
我在这里做错了什么想法?
答案 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'
}