Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell开关语句-开关语句子句中缺少语句块错误_Powershell_Switch Statement - Fatal编程技术网

PowerShell开关语句-开关语句子句中缺少语句块错误

PowerShell开关语句-开关语句子句中缺少语句块错误,powershell,switch-statement,Powershell,Switch Statement,我有一个PowerShell脚本,用于获取文件数据并生成校验和脚本,我们也使用PowerShell来验证软件部署中的UI更改 我在这个脚本中插入了一个switch语句,以标识我在上面运行这个生成脚本的服务器类型,并相应地命名路由生成的校验和文件。它通过检查这些服务器上标识服务器类型Alpha、Beta等的注册表项值来实现。交换机名称是这些注册表项值的名称 通过这个switch语句,我在switch语句子句error中收到一个缺少的语句块 当我在PowerShell ISE中查看此脚本时,我注意到

我有一个PowerShell脚本,用于获取文件数据并生成校验和脚本,我们也使用PowerShell来验证软件部署中的UI更改

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

通过这个switch语句,我在switch语句子句error中收到一个缺少的语句块

当我在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,它将调用这个开关来查看如何输出生成的文件


知道我做错了什么吗?

它在我的机器上工作。我刚刚给$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'
}

嗯……好吧,我会好好玩玩,看看我能不能让它发挥作用。谢谢