Function 调用函数时出错
我得到以下代码的解析错误。我们有多个应用程序环境,从最新版本到不同版本,我们希望动态检测环境-但由于某些原因,我遇到了解析错误,如ParseException和意外令牌。有人能帮忙吗?我正在使用Powershell 2.0 代码如下:Function 调用函数时出错,function,powershell,powershell-2.0,Function,Powershell,Powershell 2.0,我得到以下代码的解析错误。我们有多个应用程序环境,从最新版本到不同版本,我们希望动态检测环境-但由于某些原因,我遇到了解析错误,如ParseException和意外令牌。有人能帮忙吗?我正在使用Powershell 2.0 代码如下: param( ## The name of the software to search for $DisplayName = "*Systems Manager" ) Set-StrictMode -Off ## Get all the li
param(
## The name of the software to search for
$DisplayName = "*Systems Manager"
)
Set-StrictMode -Off
## Get all the listed software in the Uninstall key
$keys = Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
## Get all of the properties from those items
$items = $keys | Foreach-Object { Get-ItemProperty $_.PsPath }
## For each of those items, display the DisplayName and Publisher
foreach ($item in $items) {
if (($item.DisplayName) -and ($item.DisplayName -like $DisplayName)) {
$MS = $item.DisplayVersion
}
}
Function SyMan ($SM42) {
#SM 1
if ($MS –eq '11.3.0.23') {
Write-Host “SM 1”
#SM 2
} elseif ($MS –eq '11.1.0.12') {
Write-Host “SM 2”
#SM 3
} elseif ($MS –eq '11.0.0.26') {
Write-Host “SM 3”
#SM 4
} elseif ($MS –eq '10.2.1.5') {
Write-Host “SM 4”
#SM 5
} elseif ($MS –eq '10.1.1.2') {
Write-Host “SM 5”
#SM 6
} else ($MS –eq '11.2.3.1') {
Write-Host “SM 6”
}
} #end of function
SysMan $MS
以下是错误:
expected-token'eq'11.3.0.23'){Write-Host-oSM-1-SM-1}elseif($MS-eq'11.3.0.23)在表达式或语句中。
在C:\Tests\get\u SMVersion.ps1:38 char:24
+如果($MS?“eq”11.3.0错误消息看起来您的文件保存为UTF-8而没有BOM。请使用记事本++之类的编辑器将其打开,并将其保存为常规UTF-8(有BOM)或ANSI文本。此外,应避免使用排版字符(如排版引号、em和en破折号等)作为脚本中的语法元素。问题在于最后一个if块
} else ($MS –eq '11.2.3.1') {
Write-Host “SM 6”
}
不能在else
语句中包含条件。如果要检查其他条件,只需包含另一个elseif
语句即可
} elseif ($MS –eq '11.2.3.1') {
Write-Host “SM 6”
}
你也应该留下一个else
语句来解释其他的事情,这样你就可以这样结束它了
} else {
Write-Host "Some other SM"
}
对于这种情况,我会使用开关
switch -exact ( $MS )
{
"11.3.0.23" { Write-Host “SM 1” } #SM 1
"11.1.0.12" { Write-Host “SM 2” } #SM 2
"11.0.0.26" { Write-Host “SM 3” } #SM 3
"10.2.1.5" { Write-Host “SM 4” } #SM 4
"10.1.1.2" { Write-Host “SM 5” } #SM 5
"11.2.3.1" { Write-Host “SM 6” } #SM 6
}
检查请显示准确的错误消息。下面是错误:意外的标记“eq”'11.3.0.23
'{Write Host-oSM 1-SM 1}elseif($MS?'eq'在表达式或语句中。在C:\Tests\get?SMVersion.ps1:38 char:24+IF($MS?'eq'11.3.0)我在您的问题中是指($MS?'eq'11.3.0)(单击其右下方的“编辑”链接)注释中的代码或错误消息往往无法读取。我刚刚发布了错误。我发现字符串周围有智能引号。代码中也有智能引号吗?“SM 6”
应该是“SM 6”
。从我看到的情况来看,你的连字符也应该被替换。我确信你的双引号来自复制/粘贴。这种情况经常发生。很好。虽然错误消息明确表明存在编码问题,但下一步可能会出现这种情况。感谢大家的建议。这真的很好。带BOM的UTF-8也能正常工作从上一句话中删除了elseif-我通过选择ANSI也解决了这个问题。因此,两种方法都有效。感谢专家的帮助。