最近需要从指定公共访问的blob中复制vhd到自己的订阅存储账户,并使用vhd创建AZURE ARM虚拟机(非经典版),而且在portal.azure.cn中无法实现虚拟机映像创建等功能,于是自己使用azure powershell写了一个简单的脚本,

前期准备:

1、在ARM环境下,创建一个普通存储(切记一定要是普通存储,高级存储无法创建虚拟机),不要创建成经典版

2、将新建的普通存储名称和key填入到以下脚本中

备注:创建虚拟机时,脚本会自动将vhd复制一份作为系统盘,切记,指定系统盘的位置要和拷贝后vhd放于同一个blob中,不然会报错误

脚本简介:

运行脚本会自动从源blob中(本脚本是匿名方式拷贝,所以对方存储必须为公共存储)拷贝vhd文件到指定订阅的存储账户(必须有key),拷贝成功后开始创建ARM 虚拟机,此脚本适合单独创建虚拟机

创建说明:拷贝vhd文件到普通存储()

#源存储blob信息- VHD所在的存储地址
$sourceStorageAccountName = "{存储账户名称}" #存储账户名称
$sourceContainerName = "{容器名称}" #容器名称
$fileName="xxxx.vhd" #容器中文件的名称及扩张名

 #目标存储信息---- 从isv复制到经典存储中速度快,建议配置成经典的存储地址
$destStorageAccountName ="{目标存储账户}" #目标存储账户名称--要拷贝到自己账户的存储名称
$destContainerName ="{容器名称}" #VHD所在容器名称- 要小写字母
$destStorageAccountKey ="{存储访问key}"#key
#要创建资源组的名称
$resourceGroupName="{资源组名称}"
#虚拟机信息
$vmname = "RapidREVMA" #虚拟机名称-虚拟机磁盘也会使用此名称
$vmUser="azureuser"
$vmSize="Standard_A8_v2" #虚拟机大小:https://docs.microsoft.com/zh-cn/azure/cloud-services/cloud-services-sizes-specs#av2-series
$osType=0   #0-windows  1-Linux
#公共配置信息-默认即可,不用配置
$securePassword = ConvertTo-SecureString '{订阅登录密码}' -AsPlainText -Force
$credlogin = New-Object System.Management.Automation.PSCredential ("xxxxxx@xxxxxxx.partner.onmschina.cn", $securePassword) #将xxxx更换为自己账户的信息即可
$endpoint="core.chinacloudapi.cn"
$fileAbsoluteUri="https://"+$sourceStorageAccountName+".blob."+$endpoint+"/"+$sourceContainerName+"/"+$fileName
$locationStr="China North"
$osdiskurl = "https://"+$destStorageAccountName+".blob."+$endpoint+"/"+$destContainerName+"/" #拷贝后的vhd所在存储账户url地址(不包含文件名)
#开始复制
$sourceContext = New-AzureStorageContext -StorageAccountName $sourceStorageAccountName -Endpoint $endpoint -Anonymous;
$destContext = New-AzureStorageContext -StorageAccountName $destStorageAccountName -StorageAccountKey $destStorageAccountKey  -Endpoint $endpoint
$getdestContainerName=Get-AzureStorageContainer -Context $destContext -ErrorAction Stop | where-object {$_.Name -eq $destContainerName}
if(!$getdestContainerName)
{
    New-AzureStorageContainer -Name $destContainerName -Context $destContext
}
Start-AzureStorageBlobCopy  -AbsoluteUri $fileAbsoluteUri -DestContext $destContext -DestContainer $destContainerName -DestBlob $fileName
#Checking Status of Blob Copy -- This can be commented out if no confirmation is needed
$copyStatus=Get-AzureStorageBlobCopyState -Blob $fileName -Context $destContext -Container $destContainerName -WaitForComplete
if($copyStatus.Status -eq "Success")
{
Write-Host "copy finsh and start create vm"
#登录并创建指定资源组
Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $credlogin
New-AzureRmResourceGroup -Name $resourceGroupName -Location $locationStr
# Create a subnet configuration
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name mySubnet -AddressPrefix 192.168.1.0/24
# Create a virtual network
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName $resourceGroupName -Location $locationStr -Name MyVNet -AddressPrefix 192.168.0.0/16 -Subnet $subnetConfig -Force
#创建一个公网IP地址:
$publicIP=New-AzureRmPublicIpAddress -Name createstfromPIP -ResourceGroupName $resourceGroupName -Location $locationStr -AllocationMethod Dynamic -IpAddressVersion IPv4 -Force  #新建
Get-AzureRmPublicIpAddress -Name createstfromPIP -ResourceGroupName $resourceGroupName #查看刚刚创建的公网IP信息
#创建可用性集:
#$Availabilityset = New-AzureRmAvailabilitySet -Name cranetestAV -ResourceGroupName crane -Location $locationStr
#创建网卡:
$nic=New-AzureRmNetworkInterface -Name VHDNIC -ResourceGroupName $resourceGroupName -Location $locationStr -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $publicIP.Id -Force
#配置要使用的存储账号以及系统盘名称:
#$storage = Get-AzureRmStorageAccount -Name cranenorthtest -ResourceGroupName $resourceGroupName
#$vmname = "whxCreateVmTest"
$osdiskname = $vmname + "_OSDisk"
#$osdiskurl = "https://ygwhxteststg.blob.core.chinacloudapi.cn/whx-vhd/community-15186-37f6baac-720f-4e49-b2f7-9c39f44a82f9-1.vhd"
$vmOsDisk =$osdiskurl+$osdiskname+".vhd"
$cred = New-Object System.Management.Automation.PSCredential ($vmUser, $securePassword)
$osdiskAbsoluteUri=$osdiskurl+$fileName
#生成虚拟机的配置,将新建的虚拟机放在虚拟网络:
if($osType.Equals(1))#linux创建
{
$vmconfig = New-AzureRmVMConfig -VMName $vmname -VMSize $vmSize |`
Set-AzureRmVMOperatingSystem -Linux -ComputerName $vmname -Credential $cred| `
Set-AzureRmVMOSDisk -Name $osdiskname -VhdUri $vmOsDisk  -SourceImageUri $osdiskAbsoluteUri -CreateOption FromImage -Linux | `
Add-AzureRmVMNetworkInterface -Id $NIC.Id
}
if($osType.Equals(0)) #windows创建
{
$vmconfig = New-AzureRmVMConfig -VMName $vmname -VMSize $vmSize |`
Set-AzureRmVMOperatingSystem -Windows -ComputerName $vmname -Credential $cred| `
#-ProvisionVMAgent -EnableAutoUpdate | `
Set-AzureRmVMOSDisk -Name $osdiskname -VhdUri $vmOsDisk -SourceImageUri $osdiskAbsoluteUri -Caching "ReadWrite" -CreateOption FromImage -Windows | `
Add-AzureRmVMNetworkInterface -Id $nic.Id -Primary
}
#创建虚拟机:
New-AzureRmVM -ResourceGroupName $resourceGroupName -Location $locationStr -VM $vmconfig
$vmList = Get-AzureRmVM -ResourceGroupName $resourceGroupName
$vmList.Name
}
else
{
Write-Host "复制失败或出现错误"
}

ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机的更多相关文章

  1. Azure PowerShell 在ARM环境下使用指定 vhd(本地化后的磁盘) 来创建虚拟机

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

  2. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  3. 痞子衡嵌入式:在MDK开发环境下将关键函数重定向到RAM中执行的几种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在MDK开发环境下将关键函数重定向到RAM中执行的几种方法. 这个关键函数重定向到 RAM 中执行系列文章,痞子衡已经写过 <IA ...

  4. Azure Powershell使用已有特殊化非托管磁盘创建ARM虚拟机

    生成已有特殊化非托管磁盘的方法主要有如下两种: 1.使用StorageExplorer存储管理工具,复制特殊化磁盘到一个新的容器下 2.New Portal中删除虚拟机,默认vhd文件会保留在存储账号 ...

  5. window环境下将solr6.3部署到tomcat中

    1.我下载的solr是6.3版本的,需要jdk1.8及以上,tomcat8 JDK1.8的下载地址:http://www.Oracle.com/technetwork/Java/javase/down ...

  6. 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(附Git地址)

    本文所有的东西都是在dot Net Core 1.1环境+VS2017保证测试通过. 本文接着上次文章接着写的,不了解上篇文章的可能看着有点吃力.我尽量让大家都能看懂.这是上篇文章的连接http:// ...

  7. 在Core环境下用WebRequest连接上远程的web Api 实现数据的简单CRUD(续)

    这篇博客是上篇博客的续写,上篇博客用的是HttpClient取远程数据,用WebRequest提交,更新,删除数据.上篇本来想全文都用httpClient,可是当时无论如何也实现不了数据的提交,于是换 ...

  8. arm 环境下安装selenium+chrome

    1.  升级软件 apt-get update 2. 安装pip apt-get install python3-pip 3. 安装selenium pip3 install selenium .4. ...

  9. 在Linux环境下,将Solr部署到tomcat7中,导入Mysql数据库数据, 定时更新索引

    什么是solr solr是基于Lucene的全文搜索服务器,对Lucene进行了扩展优化. 准备工作 首先,去下载以下软件包: JDK8:jdk-8u60-linux-x64.tar.gz TOMCA ...

随机推荐

  1. idea 设置背景图片

    按下 Ctrl+Shift+A 你会看到一个对话框 在里面输入 Set Background Image 进入设置背景图片窗口 设置背景图,点击确定即可 就一个好看,强大的编程工具了

  2. 【SDOI2012】 Longgue的问题

    [题目链接] 点击打开链接 [算法] gcd(i,n)是n的约数 不妨设gcd(i,n) = d 考虑枚举d和gcd(i,n) = d有多少个 gcd(i,n) = d gcd(i/d,n/d) = ...

  3. 如何生成Android的keystore文件

    步骤   1 找到本机电脑上jdk安装的目录,使用cmd命令打开命令窗口,输入cd  jdk目录(替换成你的jdk的bin目录),进入到jdk的bin目录,接下来你才可以使用jdk的命令进行操作 步骤 ...

  4. nc之二:nc命令详解

    NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本.因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小).功能实用,被设计为一个简单.可靠的网络工具,可通 ...

  5. 利用记事本和cmd进行java编程(从安装IDE--编译--运行)

    java 最大特点---跨平台 所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行.这是软件发展的趋势和编程人员追求的目标.之所以这样说,是因为计算机硬件的种类繁多 ...

  6. 任务25:IHostEnvironment和 IApplicationLifetime介绍

    任务25:IHostEnvironment和 IApplicationLifetime介绍 IHostingEnvironment这个里面有一些参数,比如我们当前应用程序的名称.目录的. await ...

  7. Gradle系列之二 Groovy对文件的操作

    Groovy对文件的操作 对文件的遍历 假设文件的原始内容为: hello,world 这里是北京 andorid and ios are good system 第一种方法:使用 eachLine( ...

  8. E20170509-hm

    slice   vt. 切成片; 切下; 划分;  n. 薄片,切片 slicing  n. 切割; 限幅,限制; inspect    v. 视察; 检查 inspector  n. 检查员; (英 ...

  9. bzoj 3262 陌上花开 【CDQ分治】

    三维偏序 首先把所有花按 x一序,y二序,z三序 排序,然后去重,con记录同样的花的个数,然后进行cdq 现在假设有[l.r]区间,其中[l,mid] [mid+1,r],已经递归处理完毕.我们把区 ...

  10. AspectCore的AOP操作

    AOP实现缓存的一个例子 using AspectCore.DynamicProxy; using Microsoft.Extensions.Caching.Memory; [AttributeUsa ...