powershell缺少终结者:“

时间:2013-12-20 15:26:47

标签: powershell powershell-v2.0 powershell-v3.0

我有以下脚本代码

    #[string]$password = $( Read-Host "Input password, please" )
    param (
        [string]$ReleaseFile = $(throw "-ReleaseFile is required"),
        [string]$Destination = $(throw "-Destination is required")
    )

    function unzipRelease($src, $dst)
    {
        $shell = new-object -com shell.application
        $zip = $shell.NameSpace($src)
        foreach($item in $zip.items())
        {
            $shell.Namespace($dst).copyhere($item)
        }
    }

    #  .\deployrelease.ps1 -ReleaseFile ".\deploy.zip" -Destination "."

    unzipRelease –Src '$ReleaseFile' -Dst '$Destination'

我运行脚本:。\ deployrelease.ps1 -ReleaseFile"。\ deploy.zip" -Destination"。"

但我一直这样说:

    PS C:\Users\Administrator\Documents\Tools> .\deployrelease.ps1 -ReleaseFile ".\deploy.zip" -Destination
    The string starting:
    At C:\Users\Administrator\Documents\Tools\deployrelease.ps1:19 char:16
    + unzipRelease â? <<<< "Src '$ReleaseFile' -Dst '$Destination'
    is missing the terminator: ".
    At C:\Users\Administrator\Documents\Tools\deployrelease.ps1:19 char:55
    + unzipRelease â?"Src '$ReleaseFile' -Dst '$Destination' <<<<
        + CategoryInfo          : ParserError: (Src `'$ReleaseF...'$Destination`':String) [], ParseException
        + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

我找不到修复,因为我没有看到任何问题。

任何帮助?

7 个答案:

答案 0 :(得分:103)

仔细看看

中的两个破折号
unzipRelease –Src '$ReleaseFile' -Dst '$Destination'

第一个不是普通的短划线而是短划线(HTML中为&ndash;)。将其替换为Dst之前找到的短划线。

答案 1 :(得分:3)

在你的脚本中,为什么在变量周围使用单引号?这些不会扩展。使用双引号进行变量扩展或仅使用变量名称。

unzipRelease –Src '$ReleaseFile' -Dst '$Destination'

unzipRelease –Src "$ReleaseFile" -Dst "$Destination"

答案 2 :(得分:3)

在我针对同一问题的特定情况下,这是由于未使用Windows-1252或带有BOM的UFT-8编码保存的Powershell脚本引起的。

答案 3 :(得分:2)

当路径以''结尾且后跟右引号时,也会发生这种情况。 例如以下行作为参数之一传递,这是不正确的:

“ c:\ users \ abc \”

而不是按如下所示传递该参数,以便最后一个反斜杠被转义而不是转义引号。

“ c:\ users \ abc \\”

答案 4 :(得分:1)

如果您从.ps1文件中调用.bat文件,并且文件路径中有空格,也会发生此错误。

解决方法是确保.ps1文件的路径中没有空格。

答案 5 :(得分:1)

当您使用 @ 前缀/后缀和多行字符串而实际上有结束后缀 "@ 时,您可以发现错误。

我的脚本看起来像这样:

Add-Type @"
    public class SomeClass {
        ...
    }"@

我仍然得到:字符串缺少终止符:“@

消息具有误导性,因为我需要做的就是将 "@ 放入 没有任何前导空格的新行

Add-Type @"
    public class SomeClass {
        ...
    }
"@

答案 6 :(得分:0)

我的文件夹包含 ' 符号。删除后,问题解决了。