2016-07-07 77 views
0

我需要從我的環境中的所有EC2實例中獲取instanceId和PrivateIpAddress,並將其插入到表中。我有這個,但似乎沒有工作。我似乎得到的不僅僅是IP和ID。Powershell獲取AWS-EC2實例的foreach循環中的多個變量信息

$instancestate = (get-ec2instance).RunningInstance 

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

如果我更改代碼

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

我得到的ID,並可以在數據庫中插入。我也可以把它改成

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

,並獲得ip地址,並插入到數據庫中,但是當我將它們結合起來,我得到的所有信息對其中確實有.instanceId和.PrivateIpAddress在列表中時,EC2實例我將鼠標懸停在變量$實例上。任何想法如何獲得這兩個參數。我的代碼似乎是正確的,但可惜它不是......

回答

1
"VALUES ('$instances.InstanceId'" 

相同

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

現在,它似乎並不正確。你需要周圍$(),裏面的字符串:

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

謝謝,我昨晚想通了通過分配輸出到這樣一個變量,但你的方式@TessellatingHecker更多雄辯... $ MyID = $ instances.InstanceId $ MyIP = $ instances.PrivateIpAddress $ query =「INSERT INTO prodinstances(Idinstance,IPAddress)VALUES('$ MyID','$ MyIP ')「 $ Rows = Execute-MySQLNonQuery $ conn $ query } – tmac

+0

我不得不改變代碼,並插入只有當不存在,但這似乎並沒有工作,它插入無論'$ instancestate =(get-ec2instance).RunningInstance foreach($ instancestate中的$實例) { (Idinstance,IPAddress)SELECT Idinstance,IPAddress FROM prodinstances WHERE NOT EXISTS(SELECT Idinstance,IPAddress FROM prodinstances WHERE Idinstance ='$($ instances.InstanceId)'and IPAddress ='$($ instances .PrivateIpAddress)')「 $ Rows = Execute-MySQLNonQuery $ conn $ query }' – tmac

1

固定的作品就像一個魅力...

$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 

}