我有以下脚本代码
#[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
我找不到修复,因为我没有看到任何问题。
任何帮助?
答案 0 :(得分:103)
仔细看看
中的两个破折号unzipRelease –Src '$ReleaseFile' -Dst '$Destination'
第一个不是普通的短划线而是短划线(HTML中为–
)。将其替换为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)
我的文件夹包含 ' 符号。删除后,问题解决了。