tmac
tmac

Reputation: 37

Powershell Multiple variables in foreach loop getting AWS-EC2 instance info

I need to get instanceId and PrivateIpAddress from all my EC2 instances in my environment and insert into table. I have this but doesn't seem to work. I seem to get everything not just the IP and ID.

$instancestate = (get-ec2instance).RunningInstance 

foreach ($instances in $instancestate)
{
 $query = "INSERT INTO prodinstances (Idinstance, IPAddress)
VALUES ('$instances.InstanceId','$instances.PrivateIpAddress')" 
$Rows = Execute-MySQLNonQuery $conn $query 
}

If I change the code

$instancestate = (get-ec2instance).RunningInstance.InstanceId

I get the ID and can insert it in the database. I can also change it to

$instancestate = (get-ec2instance).RunningInstance.PrivateIpAddress

and get the IPAddress and insert that into the database, but when i combine them I get all the info for the EC2 instances which does have .instanceId and .PrivateIpAddress in the list when I hover over the variable $instances. Any Idea how to get both those parameters. My code seems correct but alas it is not...

Upvotes: 0

Views: 880

Answers (2)

tmac
tmac

Reputation: 37

Fixed works like a charm...

$instancestate = (get-ec2instance).RunningInstance 
foreach ($instances in $instancestate)
{

$query = "insert into prodinstances (idinstance,IPAddress) VALUES  ('$($instances.InstanceId)', '$($instances.PrivateIpAddress)') 
ON duplicate key update    idinstance='$($instances.InstanceId)',IPAddress='$($instances.PrivateIpAddr ess)'"
$Rows = Execute-MySQLNonQuery $conn $query

}

Upvotes: 1

TessellatingHeckler
TessellatingHeckler

Reputation: 29033

"VALUES ('$instances.InstanceId'"

is the same as

"VALUES ('" + $instances + ".InstanceId'"

Now it doesn't seem correct. You need $() around it, inside the string:

"VALUES ('$($instances.InstanceId)'"

Upvotes: 1

Related Questions