AWS Tools for Powershell Get-EC2Instance Filter



是否可以按计算机主机名筛选 EC2 实例?我正在尝试查找内部实例,但没有 IP 地址或实例 ID。我找不到任何例子,但我在想一些事情。

$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

有人做过这样的事情吗?

谢谢

朗达

Get-EC2Instance

不知道这样的操作系统级别细节,但你可以从Get-EC2ConsoleOutput那里得到你想要的东西。 这将输出系统日志,我相信默认情况下,亚马逊拥有的Windows AMIRDPCERTIFICATE-SUBJECTNAME通常与Windows主机名匹配。

试一试,我只是写它来打印一个实例 ID、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

延伸阅读

  • AWS 文档 - 获取 EC2Instance
  • AWS 文档 - Get-EC2ConsoleOutput

最新更新