1

我正在经历一个场景,我启动一个带有 sysprepped vhd 的新建虚拟机,一旦安装过程完成安装设备等并且操作系统被加载,我想等到整个过程完成并且虚拟机被分配一个 IP通过 DHCP 地址。

PS C:\Users\Administrator> Start-VM -Name dv.VMWIN2K8R2-3.Hng
PS C:\Users\Administrator> while ((Get-VM -Name dv.VMWIN2K8R2-3.Hng | select -ExpandProperty networkadapters).ipaddress[0] -match $null)

 {

 Start-Sleep 3

 Write-Host "Waiting to Acquire IP Address" -ForegroundColor green

 }

$ipaddress=(Get-VM -Name dv.VMWIN2K8R2-2.Hng | select -ExpandProperty networkadapters).ipaddresses[0]

Write-Host "VM has acquired an IPAddress of $ipaddress"

我尝试了上面的代码片段,但 while 循环从未运行,我注意到当 VM 关闭时 ip 地址参数为空白,所以我想匹配它直到它显示 Null 并且当我启动 VM 并且一旦服务器获得 IP DHCP 的地址它应该退出 while 循环并在控制台上打印 IP 地址。

4

3 回答 3

0

IP 可能不为空,所以它正在做它应该做的事情。IP 可能是 169.254.xx,或者至少在我使用 DHCP 之前发生在我身上的事情。在它选择一个地址并使用它之后选择它应该具有的地址的第一个八位字节怎么样?

编辑:重新阅读您的帖子后,也许它不是我想的 169。我的建议仍然适用。尝试使用这样的东西: While (!($ip -like "10.*")

于 2012-11-05T16:26:02.840 回答
0

如果没有网络堆栈,就没有地址,我想你会发现数组不存在。克里斯走在正确的轨道上。我认为你不需要做你正在做的事情,而是首先测试 ipaddress 是否是一个属性,是一个数组,并且在检查该项目的值之前至少有一个项目。

于 2012-11-06T22:51:39.683 回答
0

嗨,伙计们,我能够解决这个问题,我使用了 Get-VMNetworkAdapter Cmdlet,它解决了这个问题

while (((Get-VMNetworkAdapter $vmname | select -ExpandProperty ipaddresses) -eq $null -or ((Get-VMNetworkAdapter $vmname | select -ExpandProperty ipaddresses) -match "169.")))

{ 

Write-Progress -Activity "Waiting for VM to Aquire an IPAddress" 

}
于 2012-11-12T11:42:53.617 回答