Если вы хотите запустить независимый процесс в PowerShell - тот, который остается в живых даже после завершения процесса создания - используйте Start-Process
cmdlet:
Start-Process aws -ArgumentList @'
send-command --instance-id i-xxxx --document-name AWS-RunPowerShellScript --parameters commands=["startup.bat"]
'@
Обратите внимание на использование (буквального) здесь-строки (@'<newline>...<newline>'@
) для упрощения вложения кавычек; см. нижний раздел этого ответа для получения информации о строковых литералах PowerShell.
В то время как -ArgumentList
может принимать массив аргументов, как они переведенная в командную строку не работает с PowerShell 7.0 (и, вероятно, не будет исправлена из-за проблем обратной совместимости; см. эту проблему GitHub ).
Следовательно, лучше использовать одиночный аргумент с встроенными кавычками .
Обратите внимание, что следует использовать только двойные кавычки ("
) в качестве разделителей аргументов при вызове внешних программ (например, aws
в данном случае). [1]
[1] При прямом вызове внешней программы вы можете использовать любой стиль цитирования, потому что PowerShell, когда он перестраивает командную строку за кулисами, использует только "
для цитирования аргументов (если нужно вообще). В случае Start-Process
значение -ArgumentList
передается в API. NET (System.Diagnostics.ProcessStartInfo
), где такой перевод не выполняется.