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
進一步閱讀