В AWS SSM я использую документ RunRemoteScript для запуска сценария PowerShell для установки некоторого программного обеспечения на управляемые экземпляры SSM. Сценарий размещается в общедоступной c доступной корзине S3.
RunCommand прекрасно работает со сценарием, не принимающим никаких параметров. Программное обеспечение было успешно развернуто на управляемых экземплярах. Но мой скрипт имеет уникальный CID, встроенный в код. По соображениям безопасности мне нужно вынуть его и установить в качестве параметра для сценария PS. С тех пор RunCommand просто продолжает сбой.
Мой скрипт выглядит следующим образом (с параметром CID):
param (
[Parameter(Position = 0, Mandatory = 1)]
[string]$CID
)
Start-Transcript -Path "$([System.Environment]::GetEnvironmentVariable('TEMP','Machine'))\app_install.log" -Append
function Install-App {
<#
Installs App
#>
[CmdletBinding()]
[OutputType([PSCustomObject])]
param (
[Parameter(Position = 0, Mandatory = 1)]
[string]$msiURL,
[Parameter(Position = 2, Mandatory = 1)]
[string]$InstallCheck,
[Parameter(Position = 3, Mandatory = 1)]
[string]$CustomerID
)
if ( -not(Test-Path $installCheck)) {
# Do stuff
...
}
else {
Write-Host ("$installCheck - Already Installed")
Return "Already Installed, Skipped $(($msiURL -split '([^\\/]+$)')[1])"
}
}
Install-App -msiURL "https://s3.amazonaws.com/app.foo.com/Windows/app.exe" -InstallCheck "C:\Program Files\App\app.exe" -CustomerID $CID
Stop-Transcript
Следуя приведенной ниже документации AWS SSM, я запускаю команду ниже запустить RunCommand. https://docs.aws.amazon.com/systems-manager/latest/userguide/integration-remote-scripts.html
aws ssm send-command --document-name "AWS-RunRemoteScript" --targets "Key=instanceids,Values=mi-abc12345"
--parameters '{"sourceType":["S3"],"sourceInfo":["{\"path\": "https://s3.amazonaws.com/app.foo.com/Windows/app_install.ps1\"}"],"commandLine":["app_install.ps1 abcd123456"]}'
RunCommand продолжает сбой с ошибкой ниже:
----------ERROR-------
app_install.ps1 : The term 'app_install.ps1' is not recognized
as the name of a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the path is
correct and try again.
At C:\ProgramData\Amazon\SSM\InstanceData\mi-abcd1234\document\orchest
ration\a6811111d-c411-411-a222-bad123456\runPowerShellScript\_script.ps1:4
char:2
+ app_install.ps1 abcd123456
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (app_install.ps1:String)
[], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
failed to run commands: exit status 255
Я подозреваю, что это связано с тем, как RunCommand обрабатывает аргумент для скрипт PowerShell. Но я не могу найти никаких примеров, кроме официального документа, которому я следовал. Кто-нибудь может указать, в чем здесь проблема?
Кстати, я уже безуспешно пытался поставить ps1 после ". \".