Я пытаюсь создать конвейер, который может автоматически развертываться через AWS-CodeDeploy и запустить службу windows на экземпляре EC2, но у меня возникают проблемы с правильным сценарием powershell.
У меня есть следующее:
Appspec.yml
version: 0.0
os: windows
files:
- source: \
destination: C:\temp\MyApp
hooks:
ApplicationStop:
- location: DeploymentScripts\applicationStop.bat
timeout: 180
ApplicationStart:
- location: DeploymentScripts\applicationStart.bat
timeout: 180
applicationStart.bat
c:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\temp\MyApp\DeploymentScripts\service_create_start.ps1 -ServiceName MyService -BinaryPath 'C:\temp\MyApp\MyService.exe' -DisplayName 'Test Application' -Description 'This is a test'
И следующий powershell service_create_start.ps1:
Param([Parameter(Mandatory=$true)][string]$ServiceName,[Parameter(Mandatory=$true)][ValidateScript({Test-Path $_ -PathType 'leaf'})][string]$BinaryPath, [string]$Displayname, [string]$Description)
If (Get-Service $ServiceName -ErrorAction SilentlyContinue) {
If ((Get-Service $ServiceName).Status -eq 'Running') {
Stop-Service $ServiceName
Write-Host "Stopping $ServiceName"
} Else {
Write-Host "$ServiceName found, but it is not running."
}
} Else {
Write-Host "$ServiceName not found. Creating new Windows service."
}
$ArgumentList = '-Name "{0}" -BinaryPathName "{1} -k netsvcs" -DisplayName "{2}" -StartupType Automatic -Description "{3}"' -f $ServiceName, $BinaryPath, $DisplayName, $Description
New-Service $ArgumentList
Start-Service $ServiceName
Я создал файл bat, потому что казалось, что я не могу запустить скрипт powershell из кода развертывания с параметрами. Я не связан с этим иначе.
Моя первая проблема - это сообщение «BinaryPathName». У меня такое ощущение, что это проблема с моими цитатами в одном из этих файлов.
Моя вторая проблема (если я введу это вручную при тестировании) заключается в том, что я получаю исключение «Доступ запрещен» в строке «Новая служба».
Чтобы решить эту проблему, я попытался использовать Start-Process и глагол RunAs для запуска повышенного уровня powershell, однако у меня возникают проблемы с определением синтаксиса для добавления моих параметров (помимо имени файла ps1) с этим синтаксисом.
Я даже на правильном пути здесь, или есть лучший способ сделать это?