Azure虚拟机的默认内部IP地址由DHCP分配,并且当VM关闭,资源收回之后如果再次启动该VM,则这台VM的内部IP地址可能会发生变化,这对于迁移到Azure的本地系统而言是一个比较大的挑战,另外,对于一些向其他虚拟机提供服务的系统而言则更为严峻,比如DNS服务器,如果重新启动之后其内部IP地址发生变化的话,无疑会对整个系统造成非常大的影响。

借助最新的 PowerShell 版本,您现在能够定义和配置特定的内部 IP 地址,该地址可以静态分配给部署在虚拟网络中的 IaaS 虚拟机。使用此功能,您可以直接为虚拟机配置内部 IP 地址,即使停止再启动虚拟机该地址也不会改变。您甚至可以删除虚拟机,在几个月后重新进行部署, IP 地址还是可以保持不变。

设置虚机静态地址一般有2种情形:

§ 虚拟机已经创建

§ 新建虚拟机

 

对于第一种情形,比较简单,命令如下:

Get-AzureVM -ServiceName shnycs01 -name shnyvm01 |Set-AzureStaticVnetip -ipaddress 10.0.0.10 |Update-AzureVM

clip_p_w_picpath002

 

第二种情形:

提示:在继续之前,虚拟机需要使用的云服务、虚拟网络、存储空间要先创建好。

 

实现过程

1. 设置当前订阅的存储账号

Set-AzureSubscription -SubscriptionName '[SubscriptionName]' -CurrentStorageAccount '[StorageName]'

2. 设置当前订阅

Select-AzureSubscription -SubscriptionName '[SubscriptionName]' –Current

3. 使用精确或模糊查询,查询到某个虚拟机镜像

$p_w_picpathList = Get-AzureVMImage | where {$_.ImageName -like "*Windows-Server-2012-Datacenter*"}

$p_w_picpath=$p_w_picpathList[0]

4. 根据实际情况,修改下面[]的参数

$ServiceName= "[虚拟机名称]"

$VMSize= "[虚拟机大小]"

$adminusername="[虚拟机登录名]"

$adminpassword="[虚拟机密码]"

$SubnetName="[子网名称]"

$PrivateIP="[内网IP地址]"

$CloudServiceName="[云服务名称]"

$VNetName="[虚拟网络名称]"

$Location="[Azure数据中心]"

New-AzureVMConfig -Name $ServiceName -InstanceSize $VMSize -ImageName $p_w_picpath.ImageName | Add-AzureProvisioningConfig -Windows -AdminUsername $adminusername -Password $adminpassword -TimeZone 'China Standard Time' | Set-AzureSubnet -SubnetNames $SubnetName | Set-AzureStaticVNetIP -IPAddress $PrivateIP | New-AzureVM -ServiceName $CloudServiceName -VNetName $VNetName -Location $Location

注意:VMsize区分大小写。

 

操作截图:

ISE界面

clip_p_w_picpath004

 

完整代码如下:

Select-AzureSubscription -SubscriptionName 'MSDN Platforms' -Current

Set-AzureSubscription -SubscriptionName 'MSDN Platforms' -CurrentStorageAccount 'shnysp01'

$p_w_picpathlist=get-azurevmp_w_picpath |where {$_.p_w_picpathname -like "*Windows-Server-2012-Datacenter*"}

$p_w_picpath=$p_w_picpathlist[0]

$ServiceName="shnyvm40"

$vmsize="Medium" //相当于A2

$adminusername="master"

$adminpassword="1234.com"

$subnetname="Subnet-1"

$privateip="172.16.0.40"

$cloudservicename="shnycs01"

$vnetname="shnyvnet01"

$location="east asia"

New-AzureVMConfig -Name $ServiceName -InstanceSize $VMSize -ImageName $p_w_picpath.ImageName ` | Add-AzureProvisioningConfig -Windows -AdminUsername $adminusername -Password $adminpassword -TimeZone 'China Standard Time' |Set-AzureSubnet -SubnetNames $SubnetName | Set-AzureStaticVNetIP -IPAddress $PrivateIP | New-AzureVM -ServiceName $CloudServiceName -VNetName $VNetName -Location $Location

 

命令完成后,切换到azure门户-云服务-实例

clip_p_w_picpath006

显示Shnyvm04虚拟机正在创建。

 

另外,如果需要批量创建虚拟机,也可以编辑ISE脚本实现便捷操作。