我在从奔步服务器在EC2实例上运行命令时遇到问题。 我有一个从 AWS 控制台中的运行命令生成的命令。我将该命令放在竹子服务器上的脚本中并运行它:
aws ssm send-command --document-name "AWS-RunPowerShellScript" --targets '{"Key":"tag:Name","Values":["Auto-Scaling-Group"]}' --parameters '{"commands":["$fileEXE = \"C:\\Program Files (x86)\\NUnit\\NUnit.ConsoleRunner.3.7.0\\tools\\nunit3-console.exe\\\"","$testDll = \"C:\\TestFramework\\TestFramework\\Tests\\bin\\Debug\\TESTS.dll\"","[System.Diagnostics.Process]::Start($fileEXE,$testDll)"]}' --comment "Run Test UI Testing" --timeout-seconds 600 --region us-east-1
它确实运行测试。但它运行Chrome.exe浏览器和chromedriver.exe作为后台进程。这将抛出一个NoSuchWindowException,因为没有浏览器显示...
我可以在本地实例上运行 PowerShell 中的相同命令:(*请注意,这是我粘贴到运行命令控制台中以生成上述代码的相同命令。
$fileEXE = "C:Program Files (x86)NUnitNUnit.ConsoleRunner.3.7.0toolsnunit3-console.exe"
$testDll = "C:TestFrameworkTestFrameworkTestsbinDebugTESTS.dll"
[System.Diagnostics.Process]::Start($fileEXE,$testDll)
Chromedriver.exe是一个后台进程,Chrome.exe(浏览器(是一个常规应用程序,可以正常工作。
我相信我的问题是运行命令如何运行我的测试程序。
运行命令(发送命令(和在本地运行PowerShell命令有什么区别?它不应该做同样的事情吗?
我认为引号及其转义方式一团糟。
请参阅: 如何在双引号内转义双引号?
这个版本应该看起来简单得多:
CMD='$fileEXE = "C:Program Files (x86)NUnitNUnit.ConsoleRunner.3.7.0toolsnunit3-console.exe";'
CMD+='$testDll = "C:TestFrameworkTestFrameworkTestsbinDebugTESTS.dll";'
CMD+='[System.Diagnostics.Process]::Start($fileEXE,$testDll);'
aws ssm send-command --document-name "AWS-RunPowerShellScript"
--filters "Name=tag:Name,Values=Auto-Scaling-Group"
--comment "Run Test UI Testing" --timeout-seconds 600 --region us-east-1
--parameters commands="'$CMD'"
注意:在 Bash 外壳中运行它。