powershell is missing the terminator: "

PowershellPowershell 2.0Powershell 3.0

Powershell Problem Overview


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?

Powershell Solutions


Solution 1 - Powershell

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.

Solution 2 - Powershell

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.

Solution 3 - Powershell

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

Solution 4 - Powershell

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"

Solution 5 - Powershell

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.

Solution 6 - Powershell

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 {
        ...
    }
"@

Solution 7 - Powershell

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCoolStrawView Question on Stackoverflow
Solution 1 - PowershellTim PietzckerView Answer on Stackoverflow
Solution 2 - PowershellMorten NørgaardView Answer on Stackoverflow
Solution 3 - Powershellvikas pachisiaView Answer on Stackoverflow
Solution 4 - PowershellJacobView Answer on Stackoverflow
Solution 5 - PowershellzarView Answer on Stackoverflow
Solution 6 - PowershellJonView Answer on Stackoverflow
Solution 7 - PowershellArutyun EnfendzhyanView Answer on Stackoverflow