调用函数时出错

时间:2015-09-28 21:02:42

标签: function powershell powershell-v2.0

我收到以下代码的解析错误。我们有多个应用程序环境,其中包含不同版本的旧版本,我们希望动态检测环境 - 但由于某种原因,我遇到了ParseException和Unexpected Token等解析错误。有人可以帮忙吗?我正在使用Powershell 2.0。

以下是代码:

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

这是错误:

Unexpected token 'â?"eq '11.3.0.23'){ Write-Host â?oSM 1â?? #SM 1 }elseif($MS â?"eq' in expression or statement.
At C:\Tests\get_SMVersion.ps1:38 char:24
+ IF ($MS â?"eq '11.3.0 <<<< .23'){
+ CategoryInfo : ParserError: (â?"eq `'11.3.0....eif($MS â?"eq:String) [], ParseException
+ FullyQualifiedErrorId : UnexpectedToken

3 个答案:

答案 0 :(得分:2)

问题是你的最后一个阻止。

} 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"
}

答案 1 :(得分:1)

错误消息看起来像您的文件已保存为没有BOM的UTF-8。使用Notepad ++等编辑器打开它,并将其保存为常规UTF-8(带BOM)或ANSI文本。此外,您应该避免使用印刷字符(如印刷引号,em-和en-dashes等)作为脚本中的语法元素。

答案 2 :(得分:0)

对于这种情况,我会使用开关。

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
}

检查https://technet.microsoft.com/en-us/library/ff730937.aspx