Azure上采用Powershell从已有的VHD创建VM

刚刚的一篇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

时间: 2024-08-12 07:20:50

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

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

前面通过Json的Template在Azure上创建了Cisco的CSR路由器.但那个Json的template只支持1块网卡.如果需要多网卡的Cisco CSR路由器,可以改上篇文章中提到的Json Template文件,也可以用Powershell的脚本创建. 本文将介绍如何用Powershell创建多Interface的Cisco CSR路由器. 一.确定Cisco CSR Image的位置 和上篇文章相同,Cisco CSR Image的链接如下,我把这个文件public出来了,大家可以

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

生成Image映像文件,记录好Image的URL(下面URL为测试URL,具体请参考实际):ImageURL:https://hlmrgstoragen.blob.core.chinacloudapi.cn/vhdscopy/hlmn4sysclocap-os-2017-09-21-2CE40CEE.vhd 安装和配置Azure Powershell的步骤请参考对应的安装文档.安装配置完成后,使用下面的命令进行创建(#为注释,忽略对应的说明): #指定虚拟机名称 $vmname = "hlmsy

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

Azure的ARM模式可以通过Json的模板创建VM.本文以Cisco的CSR的image为例,介绍如何用Json的创建VM. 一.Cisco CSR的Image 首先把Cisco CSR的image复制到一个存储账户中: https://xxxx.blob.core.chinacloudapi.cn/image/CSR_3_16_4aS_CCO.vhd 创建VM的vhd文件也需要在这个存储账户中. 二.获得Json模板 在Github上找到From user image create VM的J

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

Azure上VM的OS盘的大小在创建时是固定的.Windows是127G,Linux是30G.如果需要批量创建的VM的OS Disk有更大的容量.可以考虑用下面的方法实现. 1 创建一台有Data-disk的CentOS VM,对其进行客户化,安装软件,挂载磁盘 2 扩大OS Disk的容量 3 在VM内resize OS Disk的容量 4 把这台VM捕获成Azure的Image 5 通过这个Image批量创建VM.创建VM的OS Disk容量是刚刚调整的容量 本文将采用Azure CLI 2

在世纪互联版的Microsoft Azure上做windows虚拟机的批量部署--用powershell做部署

在Azure上我们有两种部署方法:资源管理器(ARM)和用powershell部署,也就是我们常说的,经典模型.截至2016/4/6,世纪互联版本的Azure 还没有ARM,需要用powershell做批量虚拟机部署. 如果需要批量建立VM,通过portal一台一台的加上去,无疑,是件很傻很傻的事情.这时候就要用到powershell啦. 第一步,你得先有个Microsoft powershell.顺道登陆到你的Azure 订阅,这里步骤就不详细写出了. 键入:Get-AzurePublishS

通过Powershell远程管理Windows Azure上的虚拟机

Windows Azure上连接虚拟机想必不是件难事尤其是连接Windows操作系统简单点几下鼠标通过远程桌面RDPWindows Azure虚拟机会帮助你自动创建远程连接RDP的Profile你就能体验到公有云带来的便利.由于虚拟机外部连接都是通过端口映射连接的.当然基于区域网络目前Azure.CN中新创建的虚拟网络已经都是区域网络了当然你目前仍然可以创建基于地缘组的虚拟网络虽然并不推荐后可以创建虚拟机实例级别的公共IP地址所以你也可以跳过通过"云服务"端口映射的RDP而直接连接虚拟

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

前言 (二)建立虚拟网络环境,以及域控和DNS服务器 ? 1搭建虚拟网络环境 在Azure上创建虚拟网络.本例选择的是东南亚数据中心.后面在创建虚机的时候,也选择这个数据中心. VNet Name: [email protected] IP Address count : ????128, IP Range : ????????10.0.0.0 – 10.0.0.127 * sea : South East Asia, 东南亚数据中心 并创建4个子网 CTRL 子网: 32 个IP,IP范围 1

NetScaler VPX在Azure上的部署(一)

本文将介绍NetScaler的VPX部署在Azure China上.包括如何通过vhd文件上传.创建虚拟机,以及如何部署VPX. 一.首先将VHD文件解压,放到目录D:\Azure中.VHD文件的获得请联系微软或Citrix的同事. 通过powershell命令,上传vhd文件到Azure: Add-AzureVhd -Destination https://hweast.blob.core.chinacloudapi.cn/vhds/netscaler.vhd -LocalFilePath D

Azure上A/D系列虚拟机到DS系列迁移(1)

有一些用户在刚开始的时候创建了A7,D14等虚拟机来跑一些IO要求比较高的应用,比如Oracle数据库,MySQL数据库,等到用户量上来之后,性能不够,需要升级数据磁盘到SSD固态硬盘,但是问题是: Azure的固态硬盘SSD磁盘属于高级存储Premium Storage A系列,D系列的虚拟机无法使用高级存储作为数据磁盘 只有DS,DSv2,GS系列的虚拟机才可以使用SSD作为数据磁盘 A系列,D系列虚拟机无法直接升级为DS/GS系列 GS系列暂时在中国没有上线 那么在这种情况下,除了创建高级