AWS Systems ManagerのDocumentからAWS-RunPowerShellScriptを利用して、Windows Server上に配置したPythonスクリプトを実行しようとしたところ、エラーになりました。
今回は、その原因と対処方法について簡単にまとめます。
SSMドキュメントでpythonスクリプトを実行するコマンドの書き方
■実行したかったコマンド
Windows Serverには、Python 3.13を以下の場所へインストールしています。
C:\Program Files\Python313\python.exe
SSM Documentでは、当初以下のように記述していました。
Parameters:
commands:
- C:\Program Files\Python313\python.exe <スクリプトパス>
しかし、Run Commandを実行すると次のエラーが発生しました。
C:\Program : The term 'C:\Program' is not recognized as the name of a cmdlet,
function, script file, or operable program.
■原因は「Program Files」のスペース
原因は、Pythonの実行ファイルパスに含まれるProgram Filesのスペースでした。
C:\Program Files\Python313\python.exe
↑
スペース
PowerShellでは、このまま記述するとC:\Programまでをコマンドとして解釈してしまいます。
そのため、実行ファイルのパスをダブルクォーテーションで囲む必要があります。
ただし、単純に以下のように囲むだけでは、PowerShellでは文字列として扱われます。
"C:\Program Files\Python313\python.exe"
Microsoftのドキュメントでは、このような空白を含むパスを実行する場合、呼び出し演算子の&を利用する方法が案内されています。
■サーバー上で正常に実行できたコマンド
そこで、サーバーへログインして以下のコマンドを実行しました。
& "C:\Program Files\Python313\python.exe" <スクリプトパス>
この形式では、Pythonスクリプトを正常に実行できました。
ポイントは次の部分です。
& "C:\Program Files\Python313\python.exe"
&を付けることで、ダブルクォーテーションで囲んだパスを実行するコマンドとして扱えます。
■SSM DocumentではYAMLの書き方にも注意
次に、同じコマンドをSSM Documentへ反映しました。
ここでもう1つハマりました。
以下のように記述すると、
Parameters:
commands: |
- '& "C:\Program Files\Python313\python.exe" <スクリプトパス>'
|以降が1つの文字列として扱われるため、-までPowerShellへ渡されてしまいました。
実際には以下のようなコマンドとして実行されていました。
- '& "C:\Program Files\Python313\python.exe" <スクリプトパス>'
その結果、PowerShellで以下のような構文エラーが発生しました。
Missing expression after unary operator '-'.
Unexpected token '&' in expression or statement.
AWS公式のaws:runCommandの記述例では、commandsは以下のようにリストとして記述されています。
Parameters:
commands:
- PowerShellコマンド
■Run CommandのSuccess判定にも注意
今回の検証では、画面にはエラーが出ているのに、Run Commandが以下のようにSuccessになるケースもありました。
Status: Success
ResponseCode: 0
AWSのドキュメントによると、Run Commandでは基本的にスクリプトの終了コードによって成功・失敗が判定されます。PowerShellの場合、失敗をRun Commandへ正しく伝えるにはexitを明示することが推奨されています。
■まとめ
サーバーへログインして実行すると成功するのに、SSM Document経由だとうまくいかない場合は、PowerShellの構文だけでなく、SSM Documentから実際にどのような文字列が渡されているかも確認すると原因を特定しやすいです。
参考サイトリンク:aws:runCommand – マネージドインスタンスでコマンドを実行する
↓ほかの協栄情報メンバーもAWS Systems Managerに関する記事を公開しています。ぜひ参考にしてみてください。
■AWS CLIでSSMドキュメント作成時に「text contents could not be decoded」が出たときの解決策(Windows)(齊藤弘樹)
■SSM Run CommandでWindows Server 2025にCloudWatch Agentをインストール&起動(齊藤弘樹)

