Невозможно выполнить некоторые команды в файле ps1 из powershell - PullRequest
0 голосов
/ 22 октября 2018

У меня запущена служба Windows на одной из виртуальных машин Azure.
Поэтому, когда необходимо выполнить развертывание, мы копируем двоичные файлы вручную.Итак, сейчас я пишу скрипт для этого.
По сути, двоичные файлы представлены в виде zip-папки в MachineA.Эта 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"} 

Это работает нормально, когда я открываю Windows powershell в MachineA и выполняю эти команды одну за другой.
Но когдаЯ помещаю точно такие же команды в файл 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 голосов
/ 22 октября 2018

Оказывается - одна из команд неверна.
Я заменил эту строку

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

Дефис в изпуть немного другой. Я смог выяснить из этого ответа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...