58
votes

I have the following script code

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

I run the script with: .\deployrelease.ps1 -ReleaseFile ".\deploy.zip" -Destination "."

But I keep getting this:

    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

I couldn't find the fix as I do not see any problem.

Any help?

7
What editor are you using? - stark

7 Answers

137
votes

Look closely at the two dashes in

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

This first one is not a normal dash but an en-dash (&ndash; in HTML). Replace that with the dash found before Dst.

5
votes

In my specific case of the same issue, it was caused by not having the Powershell script saved with an encoding of Windows-1252 or UFT-8 WITH BOM.

3
votes

In your script, why are you using single quotes around the variables? These will not be expanded. Use double quotes for variable expansion or just the variable names themselves.

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

to

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

This can also occur when the path ends in a '' followed by the closing quotation mark. e.g. The following line is passed as one of the arguments and this is not right:

"c:\users\abc\"

instead pass that argument as shown below so that the last backslash is escaped instead of escaping the quotation mark.

"c:\users\abc\\"

2
votes

This error will also occur if you call .ps1 file from a .bat file and file path has spaces.

The fix is to make sure there are no spaces in the path of .ps1 file.

1
votes

You can spot the error when using @ prefix/suffix with multiline string while you actually have the ending suffix "@.

My script looked like that:

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

and I still got the: The string is missing the terminator: "@.

Message was misleading because all I needed to do was to put "@ into new line without any leading space:

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

my folder contained ' symbol. After I removed it, the issue resolved.