1

是否可以通過機器主機名來過濾EC2實例?我試圖找到一個內部實例,但我沒有IP地址或instanceId。我找不到任何例子,但我在想這個。適用於PowerShell Get-EC2Instance過濾器的AWS工具

$instanceName = "MYMACHINEHOSTNAME" 
$filter = New-Object Amazon.EC2.Model.Filter 
$filter.Name = "Hostname" 
$filter.Value = "$instanceName" 
$ec2Instances = (Get-EC2Instance -Region us-west-2 -Filter $filter).Instances 

有沒有人做過類似的事情?

感謝,

朗達

回答

0

Get-EC2Instance不知道操作系統級的細節這樣,但你也許能夠讓你從Get-EC2ConsoleOutput想要的東西。這將輸出系統日誌,並且我相信默認情況下,Amazon擁有的Windows AMI RDPCERTIFICATE-SUBJECTNAME通常會與Windows主機名匹配。

試試這個,我只是寫它打印INSTANCEID集合時,Windows主機名對這種情況都基於亞馬遜自有的Windows AMI EC2實例:

# Note: This is designed to work with default Windows AMIs that Amazon supplies. 
function Get-EC2InstanceWindowsHostNames 
{ 
    # Filter to use only windows instances 
    $instanceIds = (Get-EC2Instance -Filter @(@{name="platform";value="windows"})).Instances.InstanceId 

    $instanceIds | % {  
    $consoleOutput = Get-EC2ConsoleOutput -InstanceId $_ 

    # Convert from Base 64 string 
    $bytes = [System.Convert]::FromBase64String($consoleOutput.Output) 
    $string = [System.Text.Encoding]::UTF8.GetString($bytes) 

    # If the string contains RDPCERTIFICATE-SUBJECTNAME, we can extract the hostname 
    if($string -match 'RDPCERTIFICATE-SUBJECTNAME: .*') { 
     $windowsHostName = $matches[0] -replace 'RDPCERTIFICATE-SUBJECTNAME: ' 

     # Write resulting obj to stdout 
     [pscustomobject]@{InstanceID=$($consoleOutput.InstanceId);HostName=$($windowsHostName.Trim())} 
    } 
    } 
} 

示例輸出

InstanceID   HostName 
----------   -------- 
i-abcdefgh   EC2AMAZ-ABCDE 
i-12345678   WIN-1ABCD2EFG 

過濾

從那裏,你可以簡單地匹配cmdlet的輸出來過濾你的主機名:

@(Get-EC2InstanceWindowsHostNames) | ? { $_.HostName -eq 'WIN-1ABCD2EFG' } 

實施例輸出

InstanceID HostName 
---------- -------- 
i-12345678 WIN-1ABCD2EFG 

進一步閱讀