我使用基于http://blog.brianbeach.com/2014/07/setting-hostname-in-syspreped-ami.html的一些脚本将从AMI创建的新Windows实例的主机名设置为实例的Name标记。而不是HKLM:\ System \ Setup指向windeploy.exe,它运行一个运行此脚本的脚本:
$InstanceName = 'WebServerNew'
Try
{
Start-Transcript -Path D:\WebServerUtility\SysPrep\Windeploy.log -Append
Write-Host "Discovering instance identity from meta-data web service"
$InstanceId = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/instance-id').ToString()
$AvailabilityZone = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/placement/availability-zone').ToString()
$Region = $AvailabilityZone.Substring(0,$AvailabilityZone.Length-1)
Write-Host "Getting Tags for the instance"
$Tags = Get-EC2Tag -Filters @{Name='resource-id';Value=$InstanceId} -Region $Region
$InstanceName = ($Tags | Where-Object {$_.Key -eq 'Name'}).Value
Write-Host "`tFound Instance Name: $InstanceName"
}
Catch
{
Write-Host $_
$InstanceName = 'WebServerError'
}
try
{
If($InstanceName -ne $null) {
Write-Host "Setting the machine name to $InstanceName"
$AnswerFilePath = "C:\Windows\Panther\unattend.xml"
$AnswerFile = [xml](Get-Content -Path $AnswerFilePath)
$ns = New-Object System.Xml.XmlNamespaceManager($AnswerFile.NameTable)
$ns.AddNamespace("ns", $AnswerFile.DocumentElement.NamespaceURI)
$ComputerName = $AnswerFile.SelectSingleNode('/ns:unattend/ns:settings[@pass="specialize"]/ns:component[@name="Microsoft-Windows-Shell-Setup"]/ns:ComputerName', $ns)
$ComputerName.InnerText = $InstanceName
$AnswerFile.Save($AnswerFilePath)
}
}
Catch
{
Write-Host $_
}
Finally
{
Stop-Transcript
}
然后它调用WinDeploy.exe来完成专业化。
问题在于行
Write-Host "Discovering instance identity from meta-data web service"
$InstanceId = (Invoke-RestMethod 'http://169.254.169.254/latest/meta-data/instance-id').ToString()
失败,"无法连接到远程服务器"。
知道为什么它无法连接到那个?
答案 0 :(得分:0)
如果说连接与否
此外,尝试在系统初始化后运行脚本...可能是脚本运行的时间;此本地IP未初始化。
每次系统启动; EC2在连接多个NIC时,向主网络适配器添加自定义路由以启用以下IP地址:169.254.169.254。并且在连接NIC之前,您的此脚本正在执行。因此问题。
答案 1 :(得分:0)
你的脚本对我来说非常好。
问题是您的实例上的某些内容阻止了对该IP地址的访问,例如防火墙。
检查您的系统配置,以查看Windows防火墙是否阻止访问,或者是否安装了阻止其访问的任何其他安全软件。
尝试Invoke-RestMethod 'http://google.com'
也是一个不错的考验。
答案 2 :(得分:0)
您需要将其添加到脚本顶部:
Start-Service -Name 'Dhcp'
route add 169.254.169.254 MASK 255.255.255.255 0.0.0.0
触发脚本时,DHCP客户端停止。那就是为什么你没有IP。
您还需要向元数据服务添加路由。 Sysprep删除这些路由。