无法从Powershell执行ps1文件中的某些命令

时间:2018-10-22 06:23:48

标签: powershell powershell-v2.0

我在其中一个Azure VM上运行Windows服务。
因此,无论何时必须进行部署,我们都会手动复制二进制文件。所以现在,我正在编写脚本来做到这一点。
通常,二进制文件是MachineA中zip文件夹的形式。将该zip文件夹复制到MachineB(运行Windows服务的位置)。复制后,将提取文件,然后删除zip文件夹。然后在服务启动之后。

为此,我需要以下脚本。

#get session details
$UserName = "$IPAddress\$adminUsername"
$Password = ConvertTo-SecureString $adminPassword -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($UserName, $Password)
$s = New-PSSession -ComputerName $IPAddress -Credential $psCred

#stop the service
Invoke-Command -Session $s -ScriptBlock {Stop-Service -Name "ServiceName" -Force} 

#delete existing binaries in destination machine
$tempDestPath = $destinationPath  + "\*"
Invoke-Command -Session $s -ScriptBlock {param($tempDestPath)Remove-Item $tempDestPath -Recurse} -ArgumentList $tempDestPath

#copy binaries zip folder in destination machine
Copy-Item -Path $sourcePath -Destination $destinationPath -ToSession $s -Recurse

#extract zipfolder in destination machine
$zipFilePath = $destinationPath + "\" + $fileName
Invoke-Command -Session $s -ScriptBlock {param($zipFilePath,$destinationPath) Expand-Archive $zipFilePath -DestinationPath $destinationPath}-ArgumentList $zipFilePath,$destinationPath

#delete zipfolder in destination machine after extraction
Invoke-Command -Session $s -ScriptBlock {param($zipFilePath)Remove-Item –path $zipFilePath}-ArgumentList $zipFilePath

#start the service
Invoke-Command -Session $s -ScriptBlock {Start-Service -Name "ServiceName"} 

当我在MachineA中打开Windows powershell并逐个执行这些命令时,此方法工作正常。
但是,当我将完全相同的命令放入ps1文件并执行该文件时,出现以下错误:

At C:\ScriptTest\test.ps1:13 char:95
+ ...  -ScriptBlock {Start-Service -Name "ServiceName"}
+                                                                        ~~
The string is missing the terminator: ".
At C:\ScriptTest\test.ps1:11 char:42
+     Invoke-Command -Session $s -ScriptBlock {param($zipFilePath)Remov ...
+                                             ~
Missing closing '}' in statement block or type definition.
    + CategoryInfo          : ParserError: (:) [], ParseException
    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

我在哪里想念这个终结者。我不知道。我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在命令之一中找出-是错误的。
我已经替换了这一行

Invoke-Command -Session $s -ScriptBlock {param($zipFilePath)Remove-Item –path $zipFilePath}-ArgumentList $zipFilePath

与此行

Invoke-Command -Session $s -ScriptBlock {param($zipFilePath)Remove-Item -path $zipFilePath}-ArgumentList $zipFilePath

路径中的连字符稍有不同。我能够从this答案中找出答案