<powsershell>
タグを使用してユーザーデータを呼び出す代わりに、<script>
タグを使用してPowerShellを呼び出します。スクリプトの最初と最後のセクションでは、以下のようにスクリプトで
<script>
PowerShell -ExecutionPolicy Bypass -NoProfile -File c:\scripts\github-download.ps1 -user USER -password PASSWORD
</script>
、セットアップ:
# Server script called from userdata in this format
# <script>
# PowerShell -ExecutionPolicy Bypass -NoProfile -File c:\scripts\github-download.ps1 -user USER -password PASSWORD
# </script>
param (
[string]$user = $(throw "-user is required."),
[string]$password = $(throw "-password is required."),
)
Start-Transcript -Path C:\userscriptlog.txt
Import-Module WebAdministration
if ([System.Diagnostics.EventLog]::SourceExists("Userdata") -eq $False) {
New-Eventlog -Logname Application -Source 'Userdata'
}
Write-Eventlog -Logname Application -Source 'Userdata' -EventId 1 -EntryType Information -Message 'Begining post-deployment configuration script'
-- YOUR MAIN SCRIPT HERE --
Write-Eventlog -Logname Application -Source 'Userdata' -EventId 1 -EntryType Information -Message 'Post-deployment configuration script complete'
Stop-Transcript
あなたは、その呼び出しを超えるコマンドライン制御を獲得し、直接実行ポリシーおよびその他のコマンドライン設定を制御することができます
スクリプトでエラー処理を行うには、トラブルシューティングとデバッグを容易にするために、各コマンドにロバストな例外処理とロギングを使用する必要があります。このブロックは、単に現在のインスタンスIDを取得しますが、内蔵の例外処理とロギングの点に注意してください。
# get instance-id
try {
$InstanceId = (Invoke-WebRequest http://169.254.169.254/latest/meta-data/instance-id).content
} catch {
$_.Exception.message | out-file c:\InstanceId_error.log
Write-Host "FATAL: InstanceId exception"
Exit
}
if (!$InstanceId) {
Write-Host "FATAL: InstanceId is null"
Exit
} else {
$InstanceId | out-file C:\InstanceId.txt
Write-Host "InstanceId: $InstanceId"
}
あなたが実装する必要がある任意のコマンドやシェル呼び出しへのアプローチを試してみてください。
ユーザデータスクリプト用のこのpowershellスクリプト「ラッパー」は、オプションのコマンドラインパラメータを許可し、実行記録を作成し、Windowsイベントログにイベントを記録してスクリプトの基本実行を確認します。
Powershellベースのユーザーデータスクリプトに柔軟なフレームワークを提供し、簡単なデバッグとテストが可能です。
実際にこの問題を解決するには詳細が不十分です。どのようにインスタンスにユーザーデータを渡していますか(Console/CLI?base64エンコードされていますか?詳細はすべてここをクリックしてください)。インスタンスはインターネットと対話するように構成されていますか?このスクリプトでExecutionPolicyをRemoteSignedとして設定して、他のスクリプトを実行できることを確認しましたか?詳細は 'C:\ Program Files \ Amazon \ Ec2ConfigService \ Logs \ Ec2ConfigLog.txt'でec2設定ログを確認しましたか?スクリプト自体にログインしようとしましたか? –
何が起こっているのかを見ることができるので、コマンドを 'out-null'しないでください。 gitバイナリの作業セットがありますか? –
あなたは私の答えを試す機会を得ましたか? –