刚刚的一篇Blog采用Json Template的方式从已有的VHD创建了一台新的VM。由于Json Template封装的比较好,可以改的内容不多。

下面将介绍通过用Powershell来从已有的VHD创建一台新的VM。

由于Powershell中的各种变量、参数都是可以定义的,所以可以自己去修改、创建。

下面是具体的脚本:

function vm-fromvhd{
param(
#The VM resource group
[Parameter(Mandatory=$true)]
[String]$rgname,
 
#The VM name
[Parameter(Mandatory=$true)]
[String]$vmname,
 
#The High Avalibility Set name
[Parameter(Mandatory=$true)]
[String]$hasetname,
 
#The new VM IP name
[Parameter(Mandatory=$true)]
[String]$vmpipname,
 
#The Vnet Name
[Parameter(Mandatory=$true)]
[String]$vnetname,
 
#The Subnet Name
[Parameter(Mandatory=$true)]
[String]$subnet1,
 
#The new VM size
[Parameter(Mandatory=$true)]
[String]$vmsize,
 
#The existing VHD URL
[Parameter(Mandatory=$true)]
[String]$osDiskURL
)
 
#Get a random text as the random text
$hash = $null
for ($i = 0; $i -le 4; $i++){
$j = (97..122) | Get-Random -Count 1 | % {[char]$_}
$hash = $hash + $j
}
for ($i = 0; $i -le 4; $i++){
$j = (48..57) | Get-Random -Count 1 | % {[char]$_}
$hash = $hash + $j
}
 
#check the Resource Group, if not exist, create
$rgs = Get-AzureRmResourceGroup -Location "China East"
$rgrslt = $false
foreach ($rg in $rgs){if($rg.ResourceGroupName -eq $rgname){$rgrslt = $true;break}}
if(-not $rgrslt) {$rg = New-AzureRmResourceGroup -Name $rgname -Location "China East"}
 
#check the High Avalibility Set, if not exist, create
foreach ($rgh in $rgs){
$haset = Get-AzureRmAvailabilitySet -ResourceGroupName $rgh.ResourceGroupName -Name $hasetname -ErrorAction Ignore;
if($haset.name -match $hasetname){
if($haset.ResourceGroupName -match $rgname){break;}
else{write-host "Please change another haset name";exit;}
}
}
if(-not $haset.Name) {$haset = new-AzureRmAvailabilitySet -ResourceGroupName $rgname -Name $hasetname -Location $rg.Location}
 
#check the Vnet, if not exist, create
$vnets = Get-AzureRmVirtualNetwork
$vnetrslt = $false
foreach ($vnet in $vnets){if($vnet.Name -eq $vnetname){$vnetrslt = $true;break}}
if(-not $vnetrslt) {$subnet1 = New-AzureRmVirtualNetworkSubnetConfig -Name $subnet1 -AddressPrefix 172.16.1.0/24;$vnet = New-AzureRmVirtualNetwork -Name $vnetname -AddressPrefix 172.16.0.0/16 -Subnet $subnet1 -ResourceGroupName $rgname -Location $rg.Location}
 
#check the PIP address, if not exist, create
$piprslt = Test-AzureRmDnsAvailability -DomainNameLabel $vmpipname -Location $rg.location
if(-not $piprslt){$vmpipname = $hash + $vmpipname}
$pip = New-AzureRmPublicIpAddress -Name $vmpipname -AllocationMethod Dynamic -DomainNameLabel $vmpipname -ResourceGroupName $rgname -Location $rg.Location
 
#check the NIC, if not exist, create
$nics = Get-AzureRmNetworkInterface
$nicrslt = $false
foreach($nic in $nics){if($nic.name -eq $vmname){$nicrslt = $true;break}}
if($nicrslt){$nicname = $hash+$vmname}else{$nicname = $vmname}
$nic = New-AzureRmNetworkInterface -Name $nicname -ResourceGroupName $rgname -Location $rg.Location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id
 
#create the VM
$vmosname = $hash + $vmname + "osDisk"
$vm = New-AzureRmVMConfig -VMName $vmname -VMSize $vmsize -AvailabilitySetId $haset.Id
$vm = Add-AzureRmVMNetworkInterface -VM $vm -NetworkInterface $nic
$vm = Set-AzureRmVMOSDisk -VM $vm -Name $vmosname -VhdUri $osDiskURL -CreateOption Attach -Linux
 
New-AzureRmVM -ResourceGroupName $rgname -Location "China East" -VM $vm
 
}
 
$rgname = "vnet-bgp"
$vmname = "hwfromvhd02"
$hasetname = "hwvhdtest" #Please check the haset isn't avalible
$vmpipname = "hwvhdtestpip"
$vnetname = "vnet-bgp-3"
$subnet1 = "vlan1"
$vmsize = "Standard_D1"
$osDiskURL = "https://gwzdiskdisks420.blob.core.chinacloudapi.cn/vhds/hwvntp0120170401203214.vhd"
 
vm-fromvhd -rgname $rgname -vmname $vmname -hasetname $hasetname -vmpipname $vmpipname -vnetname $vnetname -subnet1 $subnet1 -vmsize $vmsize -osDiskURL $osDiskURL
 

Azure上采用Powershell从已有的VHD创建VM的更多相关文章

  1. Azure上采用Json Template从已有的VHD创建VM

    从已有的VHD创建VM是使用Azure中经常要操作的内容. 本文将介绍如何采用Json Template从已经有的VHD创建VM. 一.准备VHD 在我的Azure账户中选择一台VM,如下图: 查看其 ...

  2. 在Azure上通过Powershell创建多Interface的Cisco CSR路由器

    前面通过Json的Template在Azure上创建了Cisco的CSR路由器.但那个Json的template只支持1块网卡.如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json ...

  3. Azure Powershell使用已有Image创建ARM非托管磁盘虚拟机

    生成Image映像文件,记录好Image的URL(下面URL为测试URL,具体请参考实际):ImageURL:https://hlmrgstoragen.blob.core.chinacloudapi ...

  4. 用Json Template在Azure上创建Cisco CSR路由器

    Azure的ARM模式可以通过Json的模板创建VM.本文以Cisco的CSR的image为例,介绍如何用Json的创建VM. 一.Cisco CSR的Image 首先把Cisco CSR的image ...

  5. Azure上批量创建OS Disk大于30G的Linux VM

    Azure上VM的OS盘的大小在创建时是固定的.Windows是127G,Linux是30G.如果需要批量创建的VM的OS Disk有更大的容量.可以考虑用下面的方法实现. 1 创建一台有Data-d ...

  6. Azure Powershell blob中指定的vhd创建虚拟机

    #此脚本用于 Azure 存储账户中已有 vhd 镜像文件创建虚拟机,一般用于做好镜像测试 #----------------------------------------------------- ...

  7. 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(二)

    前言 (二)建立虚拟网络环境,以及域控和DNS服务器   1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: ...

  8. 如何在云端部署SAP HANA实战, Azure 上的 SAP HANA(大型实例)概述和体系结构

    什么是 Azure 上的 SAP HANA(大型实例)? Azure 上的 SAP HANA(大型实例)是一种针对 Azure 的独特解决方案. 除了提供 Azure 虚拟机以用于部署和运行 SAP ...

  9. 在 Windows Azure 上设计多租户应用程序

    作者:Suren Machiraju 和 Ralph Squillace 审校:Christian Martinez.James Podgorski.Valery Mizonov 和 Michael ...

随机推荐

  1. 阿拉伯数字转中文大写数字的JS

    function intToChinese ( str ) { str = str+''; var len = str.length-1; var idxs = ['','十','百','千','万' ...

  2. SOA 面向服务架构 阅读笔记(六)

    20 SOA质量 服务质量是成功的关键因素 20.1 了解SOA带来的无法预料的挑战 不同部门开发 每个开发的组件整合在一起,形成复合应用程序 整合业务流程,考虑质量问题 衡量SOA的质量. 事物质量 ...

  3. php面向对象之克隆对象

    在前面的PHP面向对象之对象和引用,我们试图以"$b=$a"的方式复制对象以传递对象的值(内容),结果却是传递对象的地址,在结尾为了解决复制对象这个问题,提到了克隆的方法.接下来讲 ...

  4. PHP的垃圾回收机制以及大概实现

    垃圾回收,简称gc.顾名思义,就是废物重利用的意思.再说这个之前先接触一下内存泄露,大概意思就是申请了一块地儿拉了会儿屎,拉完之后不收拾,那么这块地就算糟蹋了,地越用越少,最后一地全是屎.说到底一句, ...

  5. char,uchar,0xff

    如果:char test = 0xFF: 此时:test != 0xFF://因为test为char类型,0xFF为int,所以编译器会将test转为int(-1),所以不等于 如果:uchar te ...

  6. vRO 7 添加RestHost证书报错

    报错类似的错误: Cannot execute request: ; java.security.cert.CertificateException: Certificates does not co ...

  7. mongodb 中的Multikey Index Bounds解释$elemMatch

    首先说一下 $elemMatch的用法: { _id: 1, results: [ 82, 85, 88 ] } { _id: 2, results: [ 75, 88, 89 ] } $elemMa ...

  8. Solr新建collection时报错 Caused by: Direct buffer memory

    错误如下 [root@192.168.1.235 conf]# curl "http://192.168.1.235:8983/solr/admin/collections ?action= ...

  9. HDU 5037 Frog(2014年北京网络赛 F 贪心)

    开始就觉得有思路,结果越敲越麻烦...  题意很简单,就是说一个青蛙从0点跳到m点,最多可以跳l的长度,原有石头n个(都仅表示一个点).但是可能跳不过去,所以你是上帝,可以随便在哪儿添加石头,你的策略 ...

  10. Java -- JDBC 操作mysql数据库

    1. Demo1 导包时 不要导具体的mysql包, 为了兼容性,导JDBC 中 sql的包既可以了. public class Demo1 { /** * @param args * @throws ...