编辑人员注释:本文章是与Microsoft Azure工程的项目经理Kay
Singh共同撰写的

正如我在第一篇博客文章中所承诺的,我又回来了,为大家分步介绍如何在PowerShell中使用VM映像。我邀请了我的同事,负责计算
PowerShellcmdlet的PMKay和我一起为您解释相关细节。希望您已经使用过
VM映像,并且最近一直在期待这篇博客文章。好了好了……我现在有点兴奋过头了。

正如我之前所说,VM映像是
OS映像的继承性产品,这两种映像有很多相似之处。随着 VM映像功能的发展,将来您可以将
VM映像视为包含了 OS映像的产品。虽然我们将
VM映像和 OS映像分开讨论,但是
PowerShell将它们统一成“über”映像实体。所以,许多使用
OS 映像时您熟悉的 PowerShell cmdlet也适用于
VM映像。

我们首先简单回顾一下 OS映像
PowerShell知识。您可能会回想起来,要创建、列出和删除 OS映像,可以使用以下
PowerShell代码段:

您可以使用以下PowerShell代码段,通过新创建的OS映像部署VM:

或者,

希望以上内容能够帮助您回顾以前的内容,下面我们将开始深入认识 VM映像。

创建 VM以进行捕捉

在我们开始介绍有关 VM映像的具体内容前,我们首先需要一台后面要使用的虚拟机。现在我们根据上述内容,部署一台运行
SQL Server 2014、带有两个数据磁盘的虚拟机。创建一台带有SQL Server 2014 RTM DataWarehousing
四月版本的虚拟机的脚本如下:


VM 捕捉为通用化 VM映像或专用化
VM映像

在捕捉虚拟机之前,您必须确定您想要进行通用化捕捉还是专用化捕捉。在之前的博客文章中我们提到,通用化
VM 映像将作为“模型”快速创建类似的虚拟机。OS映像也有类似的功能。专用化
VM映像是新的映像,将作为“快照”在一个已知良好的时间点部署
VM,然后再执行相关任务,以防止该任务出错而导致虚拟机无法使用。

您还需要执行另外几个步骤才能使虚拟机准备好进行捕捉。要捕捉通用化
WindowsServer VM 映像,您可以按照Microsoft Azure文章如何捕捉运行
Windows Server 的虚拟机映像
中的步骤操作。要捕捉
Linux VM 映像,您可以按照相似的文章如何捕捉运行
Linux 的虚拟机映像
操作。

我们现在接着将这台虚拟机实际捕捉为
VM 映像。捕捉过程与 OS映像的捕捉过程类似。您需要使用现有的
Save-AzureVMImage cmdlet,但要加入新的参数,用于确定是捕捉OS映像还是捕捉VM映像。

我们先捕捉通用化VM映像,将其称为myFirstVMImage。

如果您想要捕捉专用化
VM 映像,您可以使用以下代码段:

请注意,使用OSState参数可以指定您捕捉VM映像的意图。如果不使用该参数,此
cmdlet将捕捉 OS映像。OS映像始终假设为已“通用化”,因此不需要
OSState 参数。

小提示:我们强烈建议您不要使用相同的名称创建两个映像(VM映像和
OS映像)。 我们确实允许您在Microsoft
Azure 平台上这样操作,但是您可能会碰到问题,因为该平台无法确定您的意图。

您可能会问,重复名称是如何出现的。如果您在一个客户端(例如PowerShell)中创建
VM 映像,然后在另一个客户端(例如门户)中创建 OS映像,就可能出现重复名称。如果您仅通过
PowerShell 创建 OS映像和
VM映像,当您使用相同名称创建 VM映像和
OS映像时,Save-AzureVMImagecmdlet将验证名称并提示错误。

列出VM映像

正如前面所回顾的,使用Get-AzureVMImage cmdlet将同时列出用户和发布的
OS映像。但是请等一下!如果我们现在就运行该 cmdlet,我们将看到我们刚才捕捉的
VM 映像。如果您不相信我们,试试以下 PowerShell代码段!

现有的Get-AzureVMImage
cmdlet 不仅返回了OS映像,还返回了用户和发布的VM映像。要仅列出VM映像,您可以使用DataDiskConfiguration等仅适用于VM映像的属性进行过滤。

删除
VM 映像

删除
VM 映像与删除 OS映像相同。

您是否记得我们曾提到过,如果有两个映像的名称相同,平台将无法确定意图?在这种情况下,以上 cmdlet将发生错误,以防误删映像。 如果您想要删除
OS 映像,您需要在 PowerShell中使用
Portal或 Invoke-Rest URI方法,直接调用REST
API。要删除VM映像,您也可以在PowerShell中使用Invoke-Rest
URI方法。其中一个映像删除后,您可以再次使用Remove-AzureVMImage cmdlet。如果您遇到这种情况,您可以使用以下PowerShell代码段,通过Invoke-RestMethod
cmdlet删除VM映像:

使用通用化
VM 映像或专用化 VM映像部署
VM

使用通用化
VM 映像进行部署与使用 OS映像进行部署类似,因为这两种映像都已通用化。主要区别在于,使用
VM映像进行部署时,您无法添加额外的数据磁盘。VM映像中应该已经包含您最初添加到虚拟机中的数据磁盘。虚拟机部署后,您可以像在任何
VM中一样附加或移除磁盘。


Remove-AzureVMImage 类似,如果有两个映像的名称相同,平台会尝试确定使用哪个映像。如果平台无法确定引用的映像是否具有唯一性:是 OS映像还是
VM映像,将发生错误。

以下PowerShell代码段将使用我们先前创建的名为myFirstVMImage的VM映像部署大型虚拟机实例

现在我们看一下如何使用专用化 VM映像进行部署,因为专用化
VM映像稍有不同。 这种情况下不需要配置信息,因为映像没有通用化。使用专用化
VM 映像与使用磁盘类似。用户名和密码与(捕捉的)原始虚拟机相同。以下为脚本代码段:

文章太长?没有读?我们来回顾一下要点:

  • VM映像可以“通用化”或“专用化”,而
    OS 映像只能“通用化”

  • 使用可选的 –OSState参数可以在Save-AzureVMImage
    cmdlet中表达您的意图:保存VM映像而不是OS映像

  • Save-AzureVMImagecmdlet不允许捕捉名称相同的VM映像或OS映像,但是使用多个客户端时您要小心。

  • Get-AzureVMImage现在会同时返回OS映像和VM映像。

  • 如果 OS映像和
    VM映像拥有相同的名称,Remove-AzureVMImagecmdlet会阻止删除操作,因为平台无法确定用户意图

希望您觉得我们的PowerShell分步介绍有所帮助。如有任何疑问或评论,请随时与我们联系!

回头再聊……

Christine和 Kay

本文翻译自:http://azure.microsoft.com/blog/2014/05/01/vm-image-powershell-how-to-blog-post-2/



VM 映像 PowerShell 教学系列博客文章的更多相关文章

  1. Flutter 即学即用系列博客——03 在旧有项目引入 Flutter

    前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ...

  2. Django 系列博客(六)

    Django 系列博客(六) 前言 本篇博客介绍 Django 中的路由控制部分,一个网络请求首先到达的就是路由这部分,经过路由与视图层的映射关系再执行相应的代码逻辑并将结果返回给客户端. Djang ...

  3. JavaScript 系列博客(四)

    JavaScript 系列博客之(四) 前言 本篇介绍 JavaScript 中的对象.在第一篇博客中已经说到 JavaScript 是一种''对象模型''语言.所以可以这样说,对象是 JavaScr ...

  4. java秀发入门到优雅秃头路线导航【教学视频+博客+书籍整理】

    目录 一.Java基础 二.关于JavaWeb基础 三.关于数据库 四.关于ssm框架 五.关于数据结构与算法 六.关于开发工具idea 七.关于项目管理工具Mawen.Git.SVN.Gradle. ...

  5. java入门到秃路线导航,元芳你怎么看?【教学视频+博客+书籍整理】

    目录 一.Java基础 二.关于JavaWeb基础 三.关于数据库 四.关于ssm框架 五.关于数据结构与算法 六.关于开发工具idea 七.关于项目管理工具Mawen.Git.SVN.Gradle. ...

  6. 窥探Swift系列博客说明及其Swift版本间更新

    Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...

  7. Flutter 即学即用系列博客——05 StatelessWidget vs StatefulWidget

    前言 上一篇我们对 Flutter UI 有了一个基本的了解. 这一篇我们通过自定义 Widget 来了解下如何写一个 Widget? 然而 Widget 有两个,StatelessWidget 和 ...

  8. Flutter 即学即用系列博客——04 Flutter UI 初窥

    前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...

  9. Flutter 即学即用系列博客——09 MethodChannel 实现原生与 Flutter 通信(二)

    前言 上一篇我们讲解了如何通过 EventChannel 实现 Android -> Flutter 的通信. 并且也看到了 Flutter 内部 EventChannel 源码也是对 Meth ...

随机推荐

  1. js/jquery获取当前页面URL地址并判断URL字符串中是否包含某个具体值

    js/jquery获取当前页面URL地址并判断URL字符串中是否包含某个具体值本文介绍jquery/js获取当前页面url地址的方法,在jquery与js中获取当前页面url方法是一样的,因为jque ...

  2. C++ Primer第18章Vector的再实现及bug修正

    C++Primer第18.1.2节在介绍allocator类的时候,给了一个仿照标准库中vector的例子.感觉示例代码非常好,但是本人发现了一个bug,与大家共享. 按照作者的示例程序,编译程序时总 ...

  3. IO-02

    /** 2 *A2-IO-02. 整数四则运算(10) 3 *C语言实现 4 *测试已通过 5 */ #include "stdio.h" #include "stdli ...

  4. MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在

    问题描述:在用vs生成MVC时若使用Internet应用程序为模版,项目建好后重新编译下无法通过,弹出错误: 解决方案:问题出来后,询问了身边很多人都是一头雾水,于是乎各种谷歌和百度,还好功夫不负有心 ...

  5. 论山寨手机与Android联姻 【4】手机产业链

    前文说到,生产手机以前,制造厂家需要预先得到软硬件的产品级设计方案,然后按照设计方案亦步亦趋地做,就可以制造出手机了.软硬件的产品级设计包括以下内容, 1. 主板设计,或者Gerber文件,或者PCB ...

  6. 图像处理库的比较:OpenCV,FreeImage,CImg,CxImage

    1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...

  7. 在一个frame设置四个组件

    import javax.swing.*; import java.awt.event.*; import java.awt.*; class TouChaCol{ JFrame frame; JLa ...

  8. oj 小黑华丽的逆袭机会

    Problem H: 小黑华丽的逆袭机会 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 79  Solved: 7 [Submit][Status][ ...

  9. HDU 3698 DP+线段树

    给出N*M矩阵.每一个点建立灯塔有花费.每一个点的灯塔有连接范围,求每一行都建立一个灯塔的最小花费,要求每相邻两行的灯塔能够互相连接.满足 |j-k|≤f(i,j)+f(i+1,k) DP思路,dp[ ...

  10. Java面试题Tomcat的优化经验

    一.掉对web.xml的监视,把jsp提前编辑成Servlet.有富余物理内存的情况,加大tomcat使用的jvm的内存 二.服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响. ...