I have a batch file that I'd like to run on startup of an EC2 Windows AMI. The program I'd like to run from that batch file takes the instance-id of the EC2 machine as a parameter. What is the simplest way to get that Instance ID passed as an argument to that program?

From Amazon's Documentation on the subject, I see that you're supposed to issue a WGET to a specified URL and parse the response. So an alternate way of phrasing this question might be "How do I pass the contents of a HTTP request to a program as an argument in a Windows batch file"

In pseudocode, this is what I'd like to do:

set ID = GET
myprogram.exe /instanceID=%ID%

Any suggestions on how I might proceed?


PowerShell 3.0 and Invoke-WebRequest:

PS> $instanceId = Invoke-WebRequest -Uri

Or if you need to survive in batch, us a win32 binary of curl.

Or based on your use-case, you could use CloudFormation to get the Instance-Id during the API call and pass it to cf-init for a bootstrap action for your application deployment.

  • 2
    This returns a webresponse - in order to get the actual id - you might want to use: $instanceId = (Invoke-WebRequest -Uri – Jochen van Wylick Feb 23 '15 at 9:53

Alternative: maybe you could do this using PowerShell on Amazon's EC2. Here are some links to start:


Powershell would be the easiest way to do this:

$webclient = new-object System.Net.WebClient
$myip = $webclient.DownloadString("")
myprogram.exe /instanceID=$myip

$wc = New-Object System.Net.WebClient;
$instanceIdResult = $wc.DownloadString("")
Write-Host $instanceIdResult
  • 2
    How is this any different from the other answer using a WebClient and DownloadString?? – Chris S Apr 30 '13 at 5:28

wget doesn't have an option to output the contents of the downloaded file to screen (or at least the version I have here doesn't), so you have to use a temporary file anyway. What you can do then is the following:

wget -O "instance-id" ""
set /p ID=< instance-id

set /p usually prompts for something and we just redirect the file's contents here. This assumes that the instance ID is the only thing that's in that file. You can have a little more fun with parsing text when using for /f but for a simple "put the first line of that file into a variable" set /p suffices.

  • Does wget -O - http://... not output the file to standard out? – David North Dec 19 '09 at 10:00
  • Ah, drat. Wasn't written into wget --help but it works, yes. Sorry. – Joey Jan 5 '10 at 19:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.