【问题标题】:powershell is missing the terminator: "powershell 缺少终结符:“
【发布时间】:2014-01-09 12:10:40
【问题描述】:

我有以下脚本代码

    #[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

我找不到修复程序,因为我没有发现任何问题。

有什么帮助吗?

【问题讨论】:

  • 你用的是什么编辑器?

标签: powershell powershell-2.0 powershell-3.0


【解决方案1】:

仔细查看中的两个破折号

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

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

【讨论】:

  • @CoolStraw:错误消息是一个提示:Src 没有被解释为选项开关,并且在它之前有奇怪的字符(â?"),所以这看起来像一个编码问题。我复制了字符串,将其粘贴到 EditPad Pro 中,让它将所有非 ASCII 字符转换为它们的 HTML 编码,然后瞧 - &amp;ndash; 解决了这个谜
  • +1 你应该说你有鹰的眼睛而不是破坏这个谜。
  • 类似:在我们的例子中,使用弯引号或倾斜引号(单引号和双引号),而不是简单的直引号。谢谢。
  • 伙计,这个观察也救了我的命,这就是从互联网复制和粘贴的问题.....
  • 谢谢!不知道我还要在这上面浪费多少时间。希望 PS 能更好地发现这一点。相反,我被指向下面 3 行,这是一个完整的兔子洞。
【解决方案2】:

在我遇到相同问题的具体情况下,这是由于没有使用 Windows-1252 或 UFT-8 WITH BOM 的编码保存 Powershell 脚本。

【讨论】:

  • 这里有同样的问题。我在脚本文件中有一些 unicode 字符,这些字符是用 UTF-8 编码保存的,没有 BOM。添加 BOM 解决了这个问题。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

    "c:\users\abc\"

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

    "c:\users\abc\\"

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        我的脚本是这样的:

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

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

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

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2021-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-26
            • 2022-01-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多