当前位置: 首页 > 编程日记 > 正文

ARM 环境下使用azure powershell 从远程blob中拉去vhd 并创建虚拟机

最近需要从指定公共访问的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 "复制失败或出现错误"
}

转载于:https://www.cnblogs.com/wanghaixing/p/7762810.html

相关文章:

读懂电脑系统(一)

addins文件夹这是系统附加文件夹,用来存放系统附加功能的文件。AppPatch文件夹这是应用程序修补备份文件夹,用来存放应用程序的修补文件。Config文件夹这是系统配置文件夹,用来存放系统的一些临时配置的文件。Connection Wizard文件夹看名字就…

java压缩解压缩类实例[转]

package com.yangxiaozuo.util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.Deflater; import java.util.zip.Inflater; /** * ZLib压缩工具 * * author 梁栋 * version 1.0 * since 1.0 */ public abstract class ZL…

前端应用打印控件

前端应用打印控件1. Lodop打印控件1.1 官网地址1.2 控件介绍1.3 控件安装程序下载1.4 控件使用1.4.1 使用示例1.4.1.1 官网提供的使用示例1.4.1.2 ng-alain提供的Lodop打印示例1.4.2 打印说明2. Hiprint打印插件2.1 官网地址2.2 插件介绍2.3 插件下载2.4 插件使用相关网址1. Lo…

剑指Offer——平衡二叉树

题目描述: 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 分析: 平衡二叉树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一…

yii2框架原生的结合框架使用的图片上传

首先我们要从model层开始写起,主要是为了创建验证规则,还有图片上传的路径以及图片的命名规则(UploadForm.php) 接下来我们要在控制器层写好业务逻辑,就是什么情况下直接在调用model层进行上传,一般失败的时…

Windows Server 2003 : 服务器群集

服务器群集 是一组运行 Microsoft Windows Server 2003 Enterprise Edition 或 Microsoft Windows Server 2003 Enterprise Edition 的独立的计算机系统(称为节点),不同节点像单个系统一样协同工作,从而确保执行关键任务的应用程序…

初学者易上手的SSH-hibernate04 一对一 一对多 多对多

这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many)。这章也将是hibernate的最后一章了,用于初学者可以了。 首先讲述一对一:就以一个人对应一张身份证为列子。 第一步:新建表…

Python爬虫入门教程 54-100 博客园等博客网站自动评论器

爬虫背景 爬虫最核心的问题就是解决重复操作,当一件事情可以重复的进行的时候,就可以用爬虫来解决这个问题,今天要实现的一个基本需求是完成“博客园“ 博客的自动评论,其实原理是非常简单的,提炼一下需求 基本需求 登…

T-SQL Convert转换时间类型

关键字: sql 时间 转化 SQL中CONVERT转化函数的用法 格式: CONVERT(data_type,expression[,style]) 说明: 此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar) 相互转换的时候才用到. 例子: SELECT CONVERT(varchar(30),getdate(),101) n…

解决Lodop 8443端口找不到CLodopfuncs.js文件问题

问题描述: GET https://localhost:8443/CLodopfuncs.js?nameCLODOP net::ERR_CERT_COMMON_NAME_INVALID 可能原因: https证书问题,通用名称不合法,地址栏访问https://localhost:8443,如下图所示 解决方法&#…

CString工作原理和常见问题分析

关于Cstring 类 版权所有©Stevencaobenq.com2003-11-6转自:http://blog.csdn.net/laiyiling/archive/2004/10/05/125216.aspx 看了很多人写的程序,包括我自己写的一些代码,发现很大的一部分bug是关于MFC类中的CString的错误用法的.出现这种错误的原…

javascript 学习三 语句

1、if 语句 if (condition){ do something else } condition 是条件语句,在这里,condition 可以是任意表达式,但结果不一定就是布尔值,但javascript 会调用 boolean() 来把结果转换成布尔值。 2、do-while …

新建本地仓库,同步远程仓场景,出现git branch --set-upstream-to=origin/master master 解决方法...

1.本地创建一个本地仓库 2.关联远程端:git remote add origin gitgithub.com:用户名/远程库名.git3.同步远程仓库到本地git pull这个时候会报错If you wish to set tracking information for this branch you can do so with:git branch --set-upstream-toorigin/<branch>…

Git npm相关命令

Git 相关命令查看用户名和密码配置用户名和密码查看git项目远程地址添加git远程仓库查看提交记录查看已有tag打标签在某次提交记录上打标签推送标签到远程推送单个指定tag到远程推送多个tag到远程2. npm相关命令2.1 设置npm源2.2 查看npm源2.3 npm清缓存查看用户名和密码 $ gi…

2009年上半年网络工程师考试下午试卷参考答案(一)

试题一&#xff08;15分&#xff09;  阅读以下说明&#xff0c;回答问题1至问题4&#xff0c;将解答填入答题纸对应的解答栏内。【说明】某公司有1个总部和2个分部&#xff0c;各个部门都有自己的局域网。该公司申请了4个C类IP地址块202.114.10.0/24~202.114.13.0/24。公司各…

创建Silverlight自定义启动画面

每一款商业的Silverlight项目&#xff0c;为了体现项目个性化&#xff0c;都会有不同的界面设计&#xff0c;项目UI设计的第一步就是创建个性的自定义启动画面&#xff0c;本文将介绍如何创建Silverlight自定义启动画面&#xff0c;也就是经常说的Splash Screen. Silverlight初…

params.success params.success(res.data)

params.success && params.success(res.data)只有success 为真&#xff0c;才执行后边的代码转载于:https://www.cnblogs.com/qq254980080/p/10619413.html

有关 drop delete truncate 问题

drop 可以删除数据库 数据表 数据表中字段 delete 删除数据表中的行 而不删除数据表 可以删除一行&#xff1a; Delete from 表 where 列名称值 或是多行&#xff1a; Delete from 表 truncate 删除数据表中数据 而不删除数据表&#xff1a; truncate table 表 三者的删除速度 …

IDEAWebstorm使用

IDEA&Webstorm使用小记录 插件 1. CodeGlance 在编辑器窗格中嵌入一个类似于Sublime中的代码小地图。使用自定义的颜色进行语法高亮&#xff0c;可以同时处理浅色和深色主题。 2. Free Mybatis plugin 3. MyBatis Log Plugin

如何用JNI技术提高Java的性能详解

阻碍Java获得广泛应用的一个主要因素是Java程序的运行效率。Java是介于解释型和编译型之间的一种语言&#xff0c;同样的程序&#xff0c;如果用编译型语言C来实现&#xff0c;其运行速度一般要比Java快一倍以上。Java具有平台无关性&#xff0c;这使人们在开发企业级应用的时候…

Jquery实战_读书笔记1—选择jQuery

近期公司积极组织我们这些开发人员学习进步&#xff0c;督促我们学习更多的技术来提高自己。为此我选择了jQuery作为我学习的方向&#xff0c;同时我也是想将我的学习心得分享给大家&#xff0c;以后我会不断的更新一系列jQuery方面的学习纪要&#xff0c;帮助大家学习。 对比了…

Python入门(一)数据类型、循环语句

脚本语言类型&#xff1a; 1.编译型语言&#xff1a;写完代码不能执行&#xff0c;需要先编译 eg&#xff1a;c、c、c# 2.解释性语言&#xff1a;不需要编译 直接执行 eg&#xff1a;python、java、php、js、go、ruby 编程工具 pycharm 1.破解方法&a…

ionic项目创建打包签名

1. 环境搭建 1.1 安装Node.js 使用node -v查看Node.js版本 1.2 安装npm 使用npm -v查看npm版本 1.3 安装ionic 使用npm install -g ionic命令&#xff0c;全局安装最新版本的ionic 使用ionic -v查看当前安装的ionic版本 1.4 安装cordova 使用npm install -g cordova命令…

Java 常用对象-Date类和Calender类

2017-11-02 22:29:34 Date类&#xff1a;类 Date 表示特定的瞬间&#xff0c;精确到毫秒。 在 JDK 1.1 之前&#xff0c;类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过&#xff0c;这些函数的 API 不易于实…

为你的水晶报表装载本地图片

本文为解答该贴所做&#xff1a;http://topic.csdn.net/u/20090524/15/911fd15a-32c6-4be9-9aa1-3ee95365e7e3.html 并没有什么新内容&#xff0c;主要是如何读取本地图片显示在报表中。 如果是CR XI及以上版本&#xff0c;可以用更简便的方法&#xff0c;参考&#xff1a;水晶…

asp.net断点续传技术

断点续传的原理 在了解HTTP断点续传的原理之前&#xff0c;先来说说HTTP协议&#xff0c;HTTP协议是一种基于tcp的简单协议&#xff0c;分为请求和回复两种。请求协议是由客户机(浏览器)向服务器(WEB SERVER)提交请求时发送报文的协议。回复协议是由服务器(web server)&#xf…

Linux安装Nodejs

Linux安装Nodejs 阿里云镜像&#xff1a; https://npm.taobao.org/mirrors/node/ 选择所需版本&#xff0c;进行下载。 我这边下载的是&#xff1a;https://npm.taobao.org/mirrors/node/v8.2.1/node-v8.2.1-linux-x64.tar.gz 环境&#xff1a; linux 7.x 目录结构&#xff08…

jQuery-1.样式篇---选择器

jQuery选择器之id选择器 页面的任何操作都需要节点的支撑&#xff0c;开发者如何快速高效的找到指定的节点也是前端开发中的一个重点。jQuery提供了一系列的选择器帮助开发者达到这一目的&#xff0c;让开发者可以更少的处理复杂选择过程与性能优化&#xff0c;更多专注业务逻辑…

CentOS 7 相关命令

Centos 7 相关命令 查看Linux内核/操作系统/CPU # uname -a查看系统位数是64位还是32位 # getconf LONG_BIT检验java是否安装成功 # java -version查询java的执行路径 # which java打开java环境变量的配置文件 # vi /etc/profile配置java环境变量后重新加载配置文件 …

51cto的初体验

注册该网站也有一段时间了&#xff0c;第一次来到这个网站是在一次无意间搜索某个问题的时候进来的&#xff0c;我有一个习惯&#xff0c;就是每次一遇到不懂的问题就会上网搜&#xff0c;看看大家都是怎么解决的&#xff0c;至少到现在用这种方法&#xff0c;我已经解决了不少…