请理解这是一个更大的脚本的一部分。 将整个脚本发布到这个问题是不合理的。
我做了一堆测试并证明了根本原因是Copy-Item
命令〜表现不同的脚本与手动执行手动执行在PS控制台中输入的cmdlet。
#PS 5.1.14393.206 on Windows10 properly
$SiteName = "mysite"
$AppPoolTemplate = ".NET` v4.5"
$iisAppPoolTemplate = "IIS:\AppPools\$AppPoolTemplate"
$iisAppPool = "IIS:\AppPools\$SiteName"
$iisSites = "IIS:\Sites\$SiteName"
Write-Host "AppPoolTemplate //$AppPoolTemplate//"
Write-Host "iisAppPoolTemplate //$iisAppPoolTemplate//"
Write-Host "iisAppPool //$iisAppPool//"
Write-Host "iisSites //$iisSites//"
Stop-WebAppPool -Name $AppPoolTemplate
Copy-Item $iisAppPoolTemplate $iisAppPool # fails
Copy-Item IIS:\AppPools\.NET` v4.5 IIS:\AppPools\mysite # doesn't fail, but doesn't copy either
第一个Copy-Item
声明
Copy-Item $iisAppPoolTemplate $iisAppPool
导致脚本失败。删除此行证明问题始于此行。报告的实际错误行是最后一行正确"关闭字符串文字"。错误地报告文字并未关闭。仅当我运行脚本时才会出现此错误。如果我将脚本内容剪切并粘贴到PS控制台中......没有错误。
如果运行第二个Copy-Item
语句
Copy-Item IIS:\AppPools\.NET` v4.5 IIS:\AppPools\mysite
从脚本完成而没有错误。但是没有做它应该做的事情。如果我将上述命令剪切并粘贴到PS控制台中......没有错误并且做了它应该做的事情。
这是实际错误。
错误行#87是脚本中带字符串文字的最后一行。
第67行也有一个字符串文字。如果我删除#87行,则错误在#67行上变得相同。
Copy-Item
行设置了问题,该问题仅在最接近脚本末尾的最后一个闭合字符串文字处报告。
PS C:\scripts> .\_addSite.ps1 At C:\scripts\_addSite.ps1:87 char:51 + $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") + ~~ The string is missing the terminator: ". + CategoryInfo : ParserError: (:) [], ParseException + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
答案 0 :(得分:1)
在发布这个问题之后,我采用了我为这个问题编写的简化脚本,发现它并没有创建错误。所以我慢慢地将破碎的脚本中的小部分剪切并粘贴到这个问题的版本中。然后每次重新运行问题的脚本。而且总是没有错误。
改变了什么?我关闭并重新打开PS控制台,放弃一个破碎的脚本并开始这个问题。现在,问题的脚本和破碎的版本都没有问题。
可能的解决方案?以前的PS控制台环境中有一些东西是根本原因,并且通过关闭控制台将其刷新。真可爱。
感谢大家的发言