VMware脚本与命令管理手册
VMware脚本与命令(PowerCLI)管理手册
VMware脚本与命令(PowerCLI)管理手册
由于VMware是个成熟的虚拟化平台,所以它拥有几个自带的和第三方的管理选项。图形用户界面GUI提供了直观的、概念上的管理VMware环境的方式,但这些对于大型或者重复的任务来说就略有不足。如大量贮藏和虚拟机配置这些任务最好使用VMware脚本和命令套件。在本期虚拟化技术手册中,我们将详细介绍VMware脚本和命令工具,如PowerShell与PowerCLI,以便有效监控VMware环境。
PowerCLI入门
VMware管理任务是一项耗时和易出错的工作。但是vSphere PowerCLI的扩展,可以帮助管理员完成一些控制工作。本部分将探究VMware脚本工具PowerCLI的概念以及其中五个比较重要的脚本。
如何使用VMware vSphere PowerCLI? 五大必备vSphere PowerCLI脚本
PowerCLI使用与管理
如果您刚刚开始应用PowerCLI管理VMware环境,需要学习的内容很多。首先,最常见和最重要的cmdlets是Get-VM。那么它该如何使用?如何设置能自动化主机服务器任务呢?要创建host profiles,PowerCLI能做些什么?这部分中,我们TecgTarget中国的特约作者Hal Rottenberg将详细介绍PowerCLI的使用与管理技巧。
掌控PowerCLI:使用Get-VM来管理虚拟机
使用PowerShell与PowerCLI自动化主机服务器任务
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 2 of 44
跳出框外 巧解PowerShell与PowerCLI难题 如何使用vSphere PowerCLI创建host profiles?
在vSphere PowerCLI PowerShell界面使用host profiles
PowerCLI技巧
如何把VMware PowerCLI脚本功能应用到VMware SRM(Site Recovery Manager)恢复计划中?如何借助PowerCLI配置标准交换机?本部分将给出解决方法与步骤。
如何用VMware PowerCLI脚本来定制SRM恢复计划 VMware管理员必备:借助PowerCLI配置标准交换机
VMware脚本和命令
无论是使用VMware ESX还是ESXi,VMware命令行和脚本——如vMA、Power CLI和vSphere Health Check——都可以辅助配置虚拟机、更好地管理VMware vSphere基础架构和通过命令行自动完成管理工作。
最佳免费的VMware脚本和命令行工具介绍 ESX与ESXi管理员必备25个命令
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 3 of 44
如何使用VMware vSphere PowerCLI?
尽管我要再次申明乏味的VMware管理任务是一项耗时和易出错的工作。但是vSphere PowerCLI的扩展,可以帮助管理员完成一些控制工作。在这篇文章中,TechTarget中国的特约虚拟化专家Hal Rottenberg将探究VMware的这个脚本工具是如何帮助我们自动地完成管理任务的。
作为一名拥有多年经验的系统管理工程师,我认为,管理员的主要工作(除了那些没有显示屏也不需要人员值守的环境)就是通过移动鼠标或者在键盘上键入指令来完成人机交互的过程。您可能此时会有疑问,这有什么问题吗?我要告诉你的是,这会导致很多的问题发生。首先,阐明几件作为VMware管理员都会面对的事情。
我们的工作需要非常的细致
重复工作会导致人为错误发生,而且
无论您的输入速度多么快,计算机总是更快
我想以上的这些情况是大家都认可的事实,无论在什么情况下,作为一名计算机用户都要面对的操作。和我们需要完成的任务是什么而无关,对吧?接下来让我们回到之前的假想环境来说明为什么这个问题会困扰我们。需要指出的,最关键的一点是由于自动化或者是缺少自动化而引起的。 为什么是自动化?
人类创造了计算机用于解决问题。通常讲,您的工作是基于其他的开发者进行的(开发者很多时候也是问题的创造者,他们发现了问题,但没有让问题一直遗留)。开发人员希望通过提供底层的指令系统来解决问题,同时提供给上层使用者一个更高层的和计算机交互的接口和工具。我知道这些都是最基本的理论,请跟着我的思路继续。
有一个非常流行的设想:系统管理员所需要的,仅仅是最上层的接口程序,所有的内脏都隐藏在那些漂亮的图形界面接口(GUI ,graphical user interfaces )后面。例如,让我们以vSphere client来举例说明。我喜欢这个应用,因为它可以很好的工作并解决问题。但是如果您需要改变十二台虚拟机的端口设置时我们需要怎么完成?让我来为您做一道算术:每台虚拟机的设置需要点击六次鼠标,总共需要重复这个无聊的鼠标点击动作72次。这种无聊的重复过程可能并且经常会导致人为错误的发生。无论您点击得有多快,都需要有您的眼睛跟踪GUI控制界面的时间和通知您的大脑把鼠标移动到正确地点的时间。所有的这些工作如果某次点击出现了几个象素的偏差,可能会使您选择一个错误的网络。
我想说到这里您应该明白我想说什么了。我有更好的解决办法,当然,那就是通过PowerCLI 实现。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 4 of 44
什么是PowerCLI
让我们来假设,此刻,您不是什么Perl语言的狂热爱好者(开个玩笑)。总之,如果您现在用Perl来管理您的vSphere环境,您可能比较难以想象自动化,在使用脚本语言时的重复过程,这当然很好。我将呈现给您的将是一种简短和便捷的操作方式,所以请继续往下读。
在开始讲述PowerCLI之前,我们必须首先了解关于PowerShell的一些内容。
PowerShell是一种由微软设计开发的,面向对象的脚本语言程序和命令行shell,用于取代VBScript和以前的CMD.EXE程序;它是面向对象的(什么是对象,稍后讲述);它是一种和其他面向对象系统(如:虚拟架构)建立连接的非常有效的方式。一台虚拟机就是一个对象,也是一个主机。和VBScript不同,PowerShell是一个shell,也就是说您可以运行它并且直接通过它发布命令。
但是,更重要的是,PowerShell是一个脚本语言。脚本语言和程序语言类似,我们通过文本的形式提供指令,然后计算机运行它并完成您需要的工作。脚本语言又与程序语言不完全相同,脚本语言相比而言是一种更高层次的计算机交互方式,所以程序员可以较少地关注那些理论上的概念。换句话说,脚本语言位于程序语言和图形界面之间。同样的,它也是两者之间的粘合剂,或者是在一个复杂的IT系统环境中的位于两者之间的中间层。(PowerShell可以比作是饭后的甜点,或者是地板上打得蜡。)
好了,背景故事已经讲了不少!PowerCLI是PowerShell的扩展。PowerCLI 内部带有165个cmdlets(读作command-lets),它们每一个都是一个独立的可以分解为字节大小的vSphere管理任务。Cmdlets使用了一些简短的逻辑词条的名称,以便于人们学习和使用。接下来让我来简单展示一下。 Show me the money
让我们先来简短地通过这个核心短语来理解“面向对象”的含义。对象指的是像汽车、房子和虚拟机等等这样的物品。对象是由其他部分所组成的,例如方法和属性。举例来说,方法指的是“加速汽车”,“打开房门”和“启动虚拟机”这样的操作。属性指的是:“320马力”,“5个房门”和“2GB内存”这样的一些问题。好的,现在是否依然还跟我的思路继续?
PowerCLI的一个简单的例子就是,Get-VM cmdlet,一个事实上非常有用的命令。下面是这个命令下达后的执行情况:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 5 of 44
点击图片本身放大
或许您已经猜到,如果不先跟vSphere环境连接并且通过认证,是无法和vSphere交互的。这个过程是由Connect-VIServer cmdlet所掌控的。这里我不再演示命令执行后的情况,这个cmdlet将提示您输入认证证书。
在连接建立之后,我输入Get-VM命令而不带任何参数。“Get”在这个短语中是动词的角色,它的意思是从某处获得某个对象。“VM”是cmlet命令中的名词部分,当然它指代的就是所面对的虚拟机。结果理解起来相当的简单,当然,这也是PowerShell的标志。您可以看到一个带有标题的列表在屏幕上显示,如果您曾经在虚拟机环境中工作过,我想这些参数特性都是一目了然的,所以我不再进一步对该命令的细节做说明。 对于每一行文字而言,它不仅仅代表字面的意思,更多的是表示一个对象。在这个例子中,我们所讨论的对象就是虚拟机。但是PowerShell的这个规制还适用于任何其他对象,当我们讨论FileInfo时对象是文件系统,或者是虚拟机,也可能是主机服务器或任何其他的东西。
最后所提到的,在某些情况对象可以指代任意东西,这个课题确实非常大,所以我对它的讲述到此为止。同时,我希望您已经获得关于PowerCLI足够多的内容,使您已经产生兴趣并将继续学习使用它。我也希望你可以同意我的观点:关于自动化是将来唯一的发展方向。所以如果您和您的小组还没有搭上这个潮流班车,我想现在这是个很好的切入契机。我接下来的系列将继续讲述有关内容,所以请保持关注。
下载PowerShell,访问微软的PowerShell站点。同样,要获得PowerCLI,请访问VMware的PowerCLI站点。
(作者:Hal Rottenberg 译者:李哲贤 来源:TechTarget中国) 原文标题:如何使用VMware vSphere PowerCLI?
原文链接:http://www.searchvirtual.com.cn/showcontent_27966.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 6 of 44
五大必备vSphere PowerCLI脚本
VMware vSphere PowerCLI是一个可以 帮助虚拟化管理员创建脚本的命令行工具,它可以在vSphere环境中自动执行管理员任务而且无需更多人为参与。
PowerCLI指代Microsoft PowerShell,是一个在很多数据中心产品中普遍存在的面向对象的脚本语言和命令行编辑器,如Microsoft Windows、Exchange和 SQL servers中都有。PowerCLI可以通过如下方式自动执行管理员任务:
cmdlets,系统动作或指令
脚本,一组cmdlet指令及其关联关系 可执行文件,独立的应用程序,以及 .NET类
借助vSphere PowerCLI,通过由165个VMware专用cmdlets组合形成脚本,IT管理员可以自动执行所有的虚拟环境相关管理任务。对于虚拟化管理员而言,脚本无疑是非常实用的,因为它可以无需人为参与执行进程(这样可以释放IT管理员去做其它工作),而且在资源紧张的环境中可以用于规划在非高峰期完成某些任务,在执行大量重复性的烦杂工作时还可以避免人为错误的发生。
在熟悉了PowerCLI的使用之后,如下五个脚本是您必备的: 一、vCheck (Daily Report) V3 Alan Renouf制作
想象一下您可以在喝早咖啡的时候顺便查看一下关于虚拟环境的详细报告。通过Alan Renouf制作的这个流行脚本,可以每天自动生成虚拟环境概要的报告并发送到您的收件箱。
除了可以列举出宿主机、虚拟机、集群数量和数据存储量以外,新版的vCheck还可以显示出虚拟机动作警报、废弃的SCSI LUN等更多内容。 二、Who created that VM? Alan Renouf制作
您是否遭遇过虚拟机在数据中心蔓延的情况,或者您无法跟踪到是谁在创建虚拟机?现在您无需采用那些诸如撤消管理员权限等的极端方式来解决问题,使用 “who created that VM?”脚本可以解决。
通过为每个虚拟机添加定制字段,这个PowerCLI脚本可以在虚拟机的注释中提供关于每个虚拟机的创建者和创建日期等信息。另外,您还可以使用这个脚本来查询一个月内创建的虚拟机数量,并把这些信息输出形成清单。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 7 of 44
三、vSwitch port overview Hugo Peeters制作
在迁移过程中,VMware VMotion并不会检查新的宿主机是否有足够的可用虚拟交换机端口。更为糟糕的是,如果端口不够用,VMotion依然会完成迁移过程而且不会向用户报警。因此结果就会导致虚拟网卡失去连接。
因此,每个vSwitch上必须保留足够的端口来满足可能会从其它主机上发生故障切换迁移过来的虚拟机的额外需求。为了检查每个vSwitch使用的端口数,可以运行这个PowerCLI脚本,然后对虚拟交换机进行适当地调整。 四、Report into Microsoft Word Alan Renouf制作
该脚本不仅可以生成整个虚拟环境的报告,而且还会把结果写成微软的Word格式,并生成彩色的曲线图和饼状图。更进一步,该PowerCLI脚本很容易进行定制化,用户可以根据需求进行信息裁剪。这个脚本用于生成一个直观地、易于理解的报告给老板汇报也非常方便。
五、Customizing Site Recovery Manager plans Mike Laverick制作 对于虚拟化管理员而言,结合PowerCLI和SRM(Site Recovery Manager),可以在灾难恢复的过程中提供更高级别的自动化。
在这篇文章中,Mike Laverick揭示了如何在SRM服务器上运行PowerCLI,并且给出一个脚本可以用于减少虚拟机在恢复过程中所需的内存数量。
关于VMware vSphere PowerCLI的更多内容,参考如下外部参考资源:
vSphere PowerCLI Blog (VMware 社区博客)
Managing VMware with PowerShell (VMware 社区 FAQ) PowerCLI Quick Reference Guide (来自virtu-al.net)
(作者:Keith Kessinger 译者:李哲贤 来源:TechTarget中国) 原文标题:五大必备vSphere PowerCLI脚本
原文链接:http://www.searchvirtual.com.cn/showcontent_42980.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 8 of 44
掌控PowerCLI:使用Get-VM来管理虚拟机
如果您刚刚开始应用PowerCLI管理VMware环境,需要学习的内容很多。下面,我们学习掌握一个最常见和最重要的cmdlets。
在上一篇文章中,TechTarget中国特约作者Hal Rottenberg推荐您使用PowerCLI,希望可以激发您进一步研究的兴趣。今天将继续讲述工具箱中最重要的一个cmdlet:Get-VM 。PowerShell自带有非常全面的帮助系统,因此让我们借助它来对Get-VM进行整体了解。如果您希望和我一起开展,现在请从开始菜单中打开PowerCLI,如截图所示:
在PowerCLI窗口中,我从帮助文件中提炼了一些关键字段。
(编者注:为便于读者定位,我们从帮助文件中提取了相关代码并整理到一个txt文件中,从这里您可以访问。它被分成了四个部分,因此您可以理解作者所讲的是哪一段代码。)
注:“PS>”代表了命令提示符,之后紧跟的文本是我所输入的。其它的都属于由之前输入的命令产生的输出结果。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 9 of 44
Get-VM和“get-cmdlets”相似,用于查找一个或多个对象。你可以对这些对象进行的操作最简单的莫过于把它们显示到控制终端上。换句话说就是:生成报告。在上一篇文章中我已经向您演示过,在已经通过Connect-VIServer cmdlet建立到ESX或vCenter的连接后,单独运行Get-VM会产生的结果。您会看到一个包含当前所有虚拟机在内的,分为四行内容的一个表格:Name、PowerState、Num CPUs和 Memory (MB)。那么,接下来会发生什么呢?其实在这背后还隐藏着更多的信息,请参考我的一台虚拟机的情况(参照摘录2)。
我希望您注意几点事情:
1. Get-VM带有Name变量,可以指定一台或多台虚拟机的名称(或通配符)来确定执
行范围。这是一个位置参数,而且位置为零,也就是说实际上您可以保留“-name”文本,而PowerShell可以指出您所需内容。
2. 我使用了Format-List cmdlets,因此属性的显示方式是垂直分行的。而且在这个
例子中,我通过加入通配符的方式让Get-VM命令显示所有的参数。这样的话,我们就获得了所有相关参数显示到屏幕上,而不仅仅是默认的四项。(注:如果您发现出现的属性项要比我的少,请检查是否使用了最新版的PowerCLI。截止本文,已经发布的最新版是4.0 U1,但是它跟老的VI环境还无法很好地兼容。)
3. 在冒号左侧的所有内容都是属性的名称,而位于冒号右侧的就是各个属性所对应的
具体值。
4. 您看到属性的值位于大括号中,代表了查看了一组不同的值。换句话说,您的虚拟
机可能有多个软驱、CD驱动器、硬盘、网卡适配器等等。 理解PowerShell的属性
如果您对vSphere客户端的方式还算了解,那么PowerState、Description或Name这样的属性含义非常明显,所以我不会过多解释。而且还有一些属性的名称是以“ID”结尾的,如“HostId”。这表示字段中包含了到其它类型对象的链接。还有少量的字段用来表示一些更加高级的VMware功能,如HARestartPriority、HAIsolationResponse和
DrsAutomationLevel等。我现在不会对这部分内容作太深入的探讨,这只是表示它们指向位于vSphere客户端中相同的名称字段。
然而,还有一个特殊的字段我想可以对它作进一步的解释,那就是Guest 属性。乍一看,Guest属性的值是VMware.VimAutomation.Client20.VMGuestImpl。实际上,这是拥有该属性的对象的完整.NET类名。 什么意思?
好吧,让我换一种说法。PowerShell中的所有内容都可以称为对象。每个对象中又有成员,而成员中包含了属性和方法(以及其它的一些东西)。如果您从未接触过面向对象的程序设计,让我们从一组基础的定义开始:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 10 of 44
属性——某个对象的属性。属性会有一些跟它相关的值。例如,“汽车”是一个对象,“车体颜色”是它对应的属性,而“白色”就是这个属性的值。
方法——可以对某个对象进行的动作。通过执行方法可以达到期望的动作。例如,对象“汽车”的方法之一是“加速”。执行这个方法可以使汽车向前移动。
在PowerShell(和PowerCLI)中,属性的值就是对象本省。很常见的一种情况就是属性就是本体,也就是说它仅仅是一个简单的字符串(如“vm1”),或者是一个整数(如“32”)。现在明白我所说的了吗?
在例子中的Guest属性,并不是一个简单的字符串,例如我们取对象VMGuestImpl,(取自于上一个例子中对象名称的最后一部分)。让我们使用Get-Member cmdlet来查看一下它的内容。Get-Member来自于PowerShell而不是PowerCLI,非常适合于检查对象的属性,如摘录3中所看到的。
在上面的第一行中,我指定了变量名为“vm”的虚拟机对象,这是从Get-VM中返回的结果看到的。这么做可以使接下来的代码更方便阅读,同时由于把所有的内容都提取到内存中执行,对于同一个对象执行连续的操作也可以加快执行的速度。
在代码的第二行中,我在希望检查的属性的名称后加了一个圆点。然后,我把该属性交给Get-Member cmdlet去处理。同时,我告诉Get-Member cmdlet只想查看该属性。这样做在本例中极大简化了输出。
Get-Member的输出结果分为三行:Name、MemberType和Definition。头两项的含义非常直白,第三项Definition稍微复杂一点。我向您出示这张表的目的是为了解释
PowerShell中属性和对象之间的关系。Difinition的第一部分告诉用户属性所属对象的类型。如您看到的,部分显示为“System.String.”,表明该对象仅为一组字母。其它的一些名称长一些,用“VMware”开头,您可以猜到这些对象要复杂一些(跟VMGuestImpl对象类似),其内部还包含有更多的信息。
讲到这里:如何显示属性和它们各自的值(摘录4),本文就结束了。请继续关注下篇文章,我讲教您如何使用Set-VM cmdlet来完成对虚拟机的设置。
(作者:Hal Rottenberg 译者:李哲贤 来源:TechTarget中国) 原文标题:掌控PowerCLI:使用Get-VM来管理虚拟机
原文链接:http://www.searchvirtual.com.cn/showcontent_43002.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 11 of 44
使用PowerShell与PowerCLI自动化主机服务器任务
这是关于PowerCLI的另一篇技巧,你还记得PowerCLI吗?它是为Windows
PowerShell脚本语言而创建的嵌入单元。这个嵌入单元能让你快速轻松地将vSphere环境的所有方面进行自动化。今天的文章介绍如何使用PowerShell和PowerCLI对主机服务器进行自动化操作。
VMware说法中的主机服务器是个提供虚拟化服务的系统。也就是所说的
hypervisor,当然这种情况下就是VMware的产品ESX Server。PowerCLI能管理ESX Server的各种版本,从3.0开始,包括“瘦”版本ESXi。以前你可以使用PowerCLI管理VMware Server(非裸金属hypervisor),但那个功能处于某种原因消失了。
那么我们来看看使用PowerCLI能对主机服务器做什么。写这篇文章的时候,装载的是PowerCLI is 4.0 Update 1。这个版本是对先前版本的重大更新,因为它所包含的cmdlets清单比之前的多。(PowerShell cmdlets类似于如cmd.exe或bash等command-shells中的内部命令。)
有个关于PowerShell的笑话,它只列出了PowerCLI cmdlets,在名称中含有“host”。
(Note that \"PS >\" indicates the shell prompt, and the text that immediately follows is what I typed. Everything else is output from a previously typed command.)
PS > get-command *host* -pssnapin vmware* | format-wideAdd-VMHost Add-VmHostNtpServerApply-VMHostProfile Export-VMHostProfileGet-VMHost Get-VMHostAccountGet-VMHostAdvancedConfiguration Get-VMHostAvailableTimeZoneGet-VMHostDiagnosticPartition Get-VMHostFirewallDefaultPolicyGet-VMHostFirewallException Get-VMHostFirmwareGet-VMHostHba Get-VMHostModuleGet-VMHostNetwork Get-VMHostNetworkAdapterGet-VMHostNtpServer Get-VMHostProfileGet-VMHostService Get-VMHostSnmpGet-VMHostStartPolicy Get-VMHostStorageGet-VMHostSysLogServer Import-VMHostProfileInstall-VMHostPatch Move-VMHostNew-VMHostAccount New-VMHostNetworkAdapterNew-VMHostProfile Remove-VMHostRemove-VMHostAccount Remove-VMHostNetworkAdapterRemove-VMHostNtpServer Remove- TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 12 of 44
VMHostProfileRestart-VMHost Restart-VMHostServiceSet-VMHost Set-VMHostAccountSet-VMHostAdvancedConfiguration Set-VMHostDiagnosticPartitionSet-VMHostFirewallDefaultPolicy Set-VMHostFirewallExceptionSet-VMHostFirmware Set-VMHostHbaSet-VMHostModule Set-VMHostNetworkSet-VMHostNetworkAdapter Set-VMHostProfileSet-VMHostService Set-VMHostSnmpSet-VMHostStartPolicy Set-VMHostStorageSet-VMHostSysLogServer Start-VMHostStart-VMHostService Stop-VMHostStop-VMHostService Suspend-VMHostTest-VMHostProfileCompliance Test-VMHostSnmp 那是60个cmdlets。不过我不能对每个cmdlet的细节加以描述,但我们能重点介绍一些cmdlets。同样,不要忘记PowerShell里的每个cmdlet都有内置帮助。需要的话输入“get-help”加上cmdlet名称,或者cmdlet名称加上“-?”。
首先我想介绍的是Get-VMHost。与所有get-cmdlets一样,着重在于从容器检索对象。如果使用Connect-VIServer cmdlet连接到vCenter服务器,然后自己运行Get-VMHost,那么结果可能如下:
PS > Connect-VIServer vlab.halr9000.comName Port User---- ---- ----vlab.halr9000.com 443 halPS > Get-VMHostName State PowerState Id CpuUsage CpuTotal Memory Memory Mhz Mhz UsageMB TotalMB---- ----- ---------- -- -------- -------- ------- -------atlesx01.hal... Connected PoweredOn ...-232 168 8000 2295 4094atlesx02.hal... Connected PoweredOn ...-225 366 8000 2645 4094atlesx03.hal... Connected PoweredOn ...t-10 350 8000 3264 4091
如果你没有vCenter备份,不用担心,可以用PowerCLI所有的信息。事实上,PowerCLI在没有vCenter的情况下能一次管理多台ESX服务器。
Connect-VIServer命令似乎不同,但最终结果是一样的。(没有vMotion或模板,你在使用某些功能时仍然需要vCenter。)
现在来分析上面命令的输出结果,然后我们将用一些其他方式使用这个cmdlet。这里执行了两个命令。第一个是建立到vCenter服务器的连接。第二个是不通过参数自己运行Get-VMHost。这样,你可以看见所有连接到vCenter的主机服务器清单(ESX or
ESXi)。这个输出表分为几列,包括主机名称、连接状态、电源状态。从informational ID查看,有四个参数能让你快速诊断系统健康状况。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 13 of 44
如同PowerShell里的其他对象,我们不能立即看到所有东西。所以,我们来看看其他一些有用的信息:
PS > get-vmhost | format-table name, manufacturer, model, numcpu, version, build -autosize
Name Manufacturer Model Num Cpu Version Build
----------------- --------- ---------------- --------- ---------- --------
atlesx01.halr9000.com Dell Inc. PowerEdge SC1435 4 4.0.0 208167
atlesx02.halr9000.com Dell Inc. PowerEdge SC1435 4 4.0.0 219382
atlesx03.halr9000.com Dell Inc. PowerEdge SC1435 4 4.0.0 219382
因此问题在于:你如何知道对象里的哪个领域可用?首先我会说在PowerShell中,每样事物都是个对象。对象包含成员,成员能包含属性和方式。属性相当于上面表格中输出信息栏所见的域名。方法我会在另一篇文章中介绍,但总之,它们能定义对对象所作的事情,就是行动。
回到属性。有种方法能列出所有属性。注意,使用Format-Wide cmdlet出来的信息横跨两个输出栏。
PS > get-vmhost | get-member -MemberType property | format-wide
Build ConnectionState CpuTotalMhz CpuUsageMhz
CustomFields HyperthreadingActive Id Manufacturer MemoryTotalMB MemoryUsageMB Model Name
NumCpu ParentId
PowerState ProcessorType State TimeZone
Version VMSwapfileDatastoreId VMSwapfilePolicy
你可使用Get-VMHost cmdlet上的Name属性,只对那些匹配的服务器进行输出,你可以使用通用符。由于PowerShell管道工作的方式,你能将VMHost对象作为输入传送到Get-VM cmdlet。最终结果将会显示宿主在某台主机服务器上的虚拟机列表。例如:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 14 of 44
PS > get-vmhost -name atlesx01* | get-vm
Name PowerState Num CPUs Memory (MB)
-------- ----------------- ------ -------- ------------------ ELGFIL01 PoweredOn 1 384 VMGVIC01 PoweredOn 1 512 VMGADC01 PoweredOn 1 384 VMGADC02 PoweredOn 1 384 ELGADC01 PoweredOn 1 512
在文章最后,我将介绍如何使用主机服务器防火墙。使用Get-VMHostFirewallException cmdlet列出防火墙允许的活动。如果输入没有参数的cmdlet,会反馈错误信息,因为你必须制定查询的具体主机服务器。下面是步骤: PS > $vmhost = get-vmhost atlesx01*
PS > Get-VMHostFirewallException -Name 'FTP Server' -VMHost $vmhost
Name Enabled
IncomingPorts OutgoingPorts Protocols ServiceRunning
-------- ------------ -------------------- -------------------- ------------- --------------
FTP Server False 21 TCP 在这个例子中,我也将通过指定防火墙规则名称过滤输出。
一旦你明白如何进行防火墙配置,使用Set-VMHostFirewallException cmdlet进行更改就很是容易的事。这个cmdlet有两个参数:
Exception:这个相当于需要更改的防火墙规则。参数能在管道上具体说明。 Enabled:这是个Boolean旗帜,如果真实,将启用规则(因为已经防火墙允许)。设置不正确将禁用规则并关闭任何响应的端口。
下图是启用FTP服务器防火墙规则的例子:
PS > $ftp = Get-VMHostFirewallException -Name 'FTP Server' -VMHost $vmhost PS > $ftp | Set-VMHostFirewallException -Enabled:$true
Name Enabled
IncomingPorts OutgoingPorts Protocols ServiceRunning
-------- ------------ -------------------- -------------------- -------------- ---------------------
FTP Server True 21 TCP
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 15 of 44
(作者:Hal Rottenberg 译者:唐琼瑶 来源:TechTarget中国) 原文标题:使用PowerShell与PowerCLI自动化主机服务器任务
原文链接:http://www.searchvirtual.com.cn/showcontent_43019.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 16 of 44
跳出框外 巧解PowerShell与PowerCLI难题
在这篇文章中,我想着重讲解一下在我浏览PowerCLI论坛时,看到的一些很有用的技巧。下面我将向你介绍这些技巧,会谈到PowerCLI是什么,以及我发现的一些特点。我还将提供涉及到的技术的一些背景资料。 PowerShell以外的思路
首先介绍的一个帖子是,“在ESX中,需要借助PowerShell脚本来找到某个虚拟机(VM)的进程ID(PID)。”此贴的前提是,作者需要找到一些信息,但他唯一知道获取到这些信息的途径就是登陆到ESX操作系统控制台(COS)。这就是为什么当前需求与他需要进程ID不符的原因了,但这足以证明,有时你为了完成某些诊断任务而必须登录到控制台。
这个帖子的特点在于,它似乎暴露了vSphere应用程序编程接口(API)上的某些不足,并需要以PowerCLI为辅助。就如所有的APIs一样,功能都是创建了一个抽象层,可以对某一产品或某一产品套件进行尽可能灵活的一致性编程,而且可以引入新的功能来降低软件开发任务的难度。问题是,与ESX虚拟化层进行沟通工作的操作系统控制台
(COS)实际上也是一个操作系统,而操作系统往往都相当复杂,并且在某些情况下,用户接口也非常分散。
回到PowerCLI和vSphere API上来。架构在VMware最底层架构之上的vSphere API层是非常有层次架构,并提供了最外层的功能。操作系统却有着不一样的架构!很不幸的是,vSphere API并不能构建一张完美的流程图以使你可以登录到操作系统控制台
(COS)。然而,PowerCLI也是基于某些API之上,这意味着你不能在操作系统(OS)控制台之内使用PowerCLI来执行相关任务——至少不是直接。这正是发布到论坛上的解决方案的用武之地。
对我们和原始帖子的作者来说幸运的事情是,PowerCLI是建立在PowerShell内,并且PowerShell可以调用一个外部进程作为脚本的一部分。该解决方案是在LucD的回贴中提到的。在这种情况下,外部进程是plink.exe,它是一个非常流行的安全命令行shell(SSH)客户端—PuTTY中的一部分。该脚本实现使用plink登录到ESX主机管理控制台,然后执行远程控制命令“vm-support”。此实用工具是一种收集信息的方法,正如原帖中提到的。
你可能会说这种行为有点像一个黑客,因为你不是通过“被认准的接口”来访问数据,但有些时候,你不得不去找到一个方法。这个特别帖子的寓意是:不要害怕,要跳出思想的框框。虽然vSphere API是一个相当大的框框,但它的目的不是为了解决你可能遇到的每一个vSphere系统的问题。事实上,对于它准确的理解是,它确实不适合用于诊断。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 17 of 44
当PowerCLI的内置命令不起作用
这第二个帖子标题是,“使用脚本来配置vSwitch上的安全参数。”虽然在这个帖子中的脚本非常高深,但是我认为这将是一个很好的例子,因为我认为它描述了一种常见的场景,当你没有使用PowerCLI 内置命令而使用到vSphere API的功能。其基本前提是内置命令(在以前的文章我也谈到过)与API的功能没有100%的对等。然而,通过使用Get-View内置命令,再加上其他一些技巧,你就可以完成很多的需要做的事情。 此贴的作者想要说的是关于设置vSwitch安全方面的设置。我打开安全选项卡中的一个选项页面,当你打开一台虚拟交换机的性能属性时就可以看到,如下图:
不幸的是,你不能通过内置命令设置这些属性,下图为Set-VirtualSwitch命令的帮助文档:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 18 of 44
该内置命令缺乏安全设置参数。也有可能,VMware正在并将继续缩短内置命令和API之间的差距,但今天它确实是帮不了我们了。
为了弥补暂时的不足,你必须使用Get-View的内置命令。Get-View是非常有用的¬——它就像释放出一种技能以让你闯过难关。我不打算详细介绍有关的内置命令,但你需要知道的是,目前PowerCLI 内置命令给虚拟化管理员开发了一个可以与PowerShell协调工作的可定制接口。当它起作用时,这对于管理员来说是好消息,但是当你的操作受到了内置命令的制约,那么你必需采用底层API对象。换句话说,你需要理解一个完全不同的接口——这与程序员为vSphere开发软件时看到的一样。
回到帖子,帖子中有段代码,如下所示(为便于阅读,已稍微编辑):
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 19 of 44
第1行检索了主机列表并将它们分配给一个变量。 第2行遍历该变量中包含的每个主机服务器,并找到名为“vSwitch2”的交换机。第3行在这里你可以看到Get-View内置命令的使用以获取原始对象。
4-6行,你会得到一个以一定方式命名的vSphere API,这些将为更新虚拟交换机做好准备——“艰难的方式”。
在第7行会报错。为了达到编辑虚拟交换机的目的,作者给出了非常有效的假设,所以你将使用到一个新的对象(这些通常是vSphere API使用来描述一个正在创建或修改的对象)。
但问题是,就像LucD在回复中做出的非常有用的解释,该API有时是相当挑剔。希望看到这个规范的对象是,它其中的每一个参数字段都被明确定义并赋予了默认值。在这一点上,你可以找出这些默认值应该是什么,也可以简单地复制一个已有的,之后再修改成你的内容。更新后的代码如下所示:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 20 of 44
我想强调这个论坛帖子的目的是想强调什么方式才是将PowerShell和vSphere API对象协调工作的最佳方式。当你修改一个现有对象的时候,复制该对象的属性,然后再修改对象的属性。这将为你节省不必再通过API文档找到对象的正确默认值,因为那可能是一件头痛的事情,尤其当你去尝试使用对象的新属性的时候。但是,要记住,当你花时间来从头创建新对象的时候,那么这种便捷的方式对你不会有任何帮助。
(作者:Hal Rottenberg 译者:于富春 来源:TechTarget中国) 原文标题:跳出框外 巧解PowerShell与PowerCLI难题
原文链接:http://www.searchvirtual.com.cn/showcontent_36581.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 21 of 44
如何使用vSphere PowerCLI创建host profiles?
VMware的host profiles可以协助完成一些自动化的、具备重复性的以及紧急的配置管理任务。而这些方面的改善可以极大地提高数据中心的成熟度。伴随着虚拟架构规模的增长,如何有效利用host profiles等提供的一些功能属性成为越来越关键的课题。 本文,TechTarget中国的特约作者Hal Rottenberg将阐述如何通过使用vSphere PowerCLI结合host profiles来完成对新主机的分发,以及完成对现有主机的一致性相关检查工作。
注:您必须首先拥有PowerCLI 4.0或者是更高版本、vSphere 4.0以及可以正常运行VMware host profiles所需的软件许可。如果想验证您现有产品的版本,可以在PowerCLI提示符后输入Get-PowerCLIVersion。
Host profile cmdlets
首先,也是最重要的一点,就是了解哪些cmdlets可以和host profiles一起工作。找到这个答案最快捷的办法就是在vSphere PowerCLI命令提示行之后输入Get-Help。如果我们同时再加入\"*hostprofile*\"的辅助字符串,就可以得到如下图所示的结果:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 22 of 44
上图中仅显示出cmdlets命令的纲要,不过您可以通过在Get-Help命令后加入某个cmdlets的名称来了解更多信息,从而获悉它们可以完成哪些具体功能。
如果您对于host profiles如何在vSphere Client端工作的原理了如指掌,那您一定已经可以理解使用每个相关cmdlets的方法和目的。对于不太了解的人我简单解释一下:host profiles背后代表的含义是如果我们选择把某个宿主机作为“reference
host”。那么当使用host profiles的时候,所有基于这个“reference host”而创建的主机都会拥有和它完全相同的配置。
第一步是在vSphere客户端中,基于某个“reference host”创建一个host profiles。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 23 of 44
还有一种方式,通过使用New-VMHostProfile cmdlets(用法我稍后会讲到)。一旦您拥有了host profiles,就可以把它链接到一个集群或者是某台独立的主机上。这样,就可以通过和host profiles中主机配置的比对,来检查某台或者多台,甚至是整个集群系统配置的一致性。
在PowerCLI中,可以通过Apply-VMHostProfile cmdlet来执行相应改变,以及通过Test-VMHostProfileCompliance cmdlet来检查一致性。
最后一点,也是host profiles中任务量最大的一点就是如何把一个新profile的配置应用到一台全新的主机上。通过这一步您可以把所做的配置更改应用到目标主机系统中。很明显的一点,改变某个宿主机服务器的主要配置信息,会直接干扰到它提供虚拟化服务的能力。因此,主机需要被设置为维护模式,以方便应用所做的配置更改。当您已经做好触发必要的配置更改所需的准备工作后,就可以再一次地执行Apply-VMHostProfile cmdlet应用这些更改。
通过PowerCLI创建一个全新的host profiles
借助PowerCLI可以很轻易地创建一个新的host profiles。您仅需要提供一个名称以及目标服务器就可以了,您可以看到下图所示内容:
很简单,对不对?实际操作仅会花费几秒钟的时间。而真正让人惊奇的事情稍后还会有很多,当我们开始把这些更改的配置信息应用于整个集群系统时。下面是在vSphere Client中看到的截图的内容,从中可以看出我的新profile服务器的部分配置信息。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 24 of 44
接下来让我们开始进入下一步:挂载主机。
(作者:Hal Rottenberg 译者:李哲贤 来源:TechTarget中国) 原文标题:如何使用vSphere PowerCLI创建host profiles?
原文链接:http://www.searchvirtual.com.cn/showcontent_38829.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 25 of 44
在vSphere PowerCLI PowerShell界面使用host profiles
在本文的上半部分中,我们介绍了VMware host profiles的概念以及使用PowerCLI创建一个全新的host profiles的方法。下面我们将挂载主机并检查host profiles的一致性。
把某个主机或集群系统挂载到host profiles
如我之前所讲,把主机挂载到host profiles并且应用这些更改的方法非常简单。只需在PowerCLI中运行一个简单的cmdlets:Apply-VMHostProfile。在我们开始举例之前,先来简单解释一些这个cmdlets中各个参数所代表的含义。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 26 of 44
注:在使用Apply-VMHostProfile时还有很多需要特别注意的地方。请一定要注意参考PowerCLI中的help相关内容来获取更多信息。 让我们继续实现profile跟集群的连接:
如果连接成功了,您将会重新获得对目标实体的控制权。而在现有的Get-VMHostProfile cmdlet版本下,您无法轻易地看到哪些实体已经被挂载,但是接下来我将会向您展示如何借助Get-View 和Get-VIObjectByVIView cmdlets来获得这些详细信息。
检查host profiles的一致性
接下来,让我们一起来检查$profile变量指代的所有host profiles的一致性情况。这个操作是通过Test-VMHostProfileCompliance cmdlet实现的。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 27 of 44
Test cmdlet可以返回很多的相关信息,因此我强烈建议您通过变量来指定所需的结果。下面是如何进行操作的演示:
在第二行中,我在Format-List cmdlet中加入了$test变量。这么做的目的是因为在默认的结果列表中,很多相关的信息被隐藏了。而很多有价值的信息都是来自于对$test变量IncomplianceElementList属性的核对过程。在截图的最下方,您可以看到很简单地英文提示说明了兼容性检查失败的原因。对于实现vSphere环境中配置变化的检查而言,这是一个非常实用的工具。
请参考如下我在使用vSphere Client时看到的内容:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 28 of 44
应用host profiles设置
接下来,让我们开始对ESX主机做一致性检查。如上所提到的,主机必须首先被设置为维护模式。您可以通过PowerCLI中的Set-VMHost以及状态参数cmdlets实现这个操作。在开始前,您还需要做好把某台主机从集群中断开的准备,正如我们在使用vSphere client时所做的那样。
在第二行命令中,我应用了profile。换句换说,vSphere创建了丢失的portgroup。接下来让我们重新检查一次一致性。
如果此时您在vSphere Client中点击刷新,就可以看到所有的项目都已经处于绿色状态。
看过本文之后,您应该已经对于如何配合host profiles使用PowerCLI有了一定的了解。现在让我们抛开这些理论的东西,开始对系统的一致性检查吧!
(作者:Hal Rottenberg 译者:李哲贤 来源:TechTarget中国) TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 29 of 44
原文标题:在vSphere PowerCLI PowerShell界面使用host profiles 原文链接:http://www.searchvirtual.com.cn/showcontent_38831.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 30 of 44
如何用VMware PowerCLI脚本来定制SRM恢复计划
在本篇快速提示中,我将演示如何把VMware PowerCLI脚本功能应用到VMware SRM(Site Recovery Manager)恢复计划中。本篇取自于我即将出版的一本关于VMware SRM4.0的书。
虽然您还可以采用传统的(.bat)文件方式在SRM中执行命令行步骤,但是微软提供的.bat文件并不是专门创建的,为操作和调整vSphere平台而提供的扩展程序接口(API-advanced programming interface)。如果您的目的是为了制作更为精细的脚本,那么我们确实需要一种更为全面的脚本引擎工具。幸运地是,VMware即将整合微软的PowerShell环境,并推出专用于管理VMware虚拟环境的cmdlets命令接口。 首先下载并在恢复站点的SRM服务器上安装微软的PowerShell,然后下载和安装VMware PowerCLI工具。
一旦我们完成了在恢复站点SRM服务器上PowerCLI的安装,就可以开始创建.PS脚本。并且在此之前,我们要通过PowerCLI配置相应的安全设置,并且确保可以通过PowerCLI登陆恢复站点的vCenter,这么做是非常有意义的。
在SRM论坛上,最常见的问题之一就是如何减少恢复进程中虚拟机对内存的占用量。这是一个实际上很常见的问题,因为通常情况下恢复站点的ESX服务器要相对差一些。例如,或许恢复站点的服务器物理内存数量要少于被保护的站点。通过使用PowerCLI,我们可以通过.PS脚本,在启动虚拟机之前自动调用减少虚拟机内存分配的进程。
通过使用PowerCLI,可以有很多种实现方法。您可以为每台虚拟机都创建一个.PS脚本来减少其内存占用。如下是一个实例,通过这个PS脚本可以完成对我命名为ctx01的虚拟机的处理。在脚本中,我使用了set-vm cmdlet把恢复站点虚拟机的内存分配减少为1024MB。另外,–confirm:$false命令 用来在需要人工确认更改时,完成操作而无须等待。 例1
connect-viserver vc4nj.corp.com --user corp\\administrator --password vmware Set-VM ctx01 -MemoryMB \"1024\" -Confirm:$FALSE
Disconnect-VIServer –Server vc4nj.corp.com -Confirm:$FALSE
当然,为每台虚拟机都创建一个.PS脚本对管理员来说是非常沉重的负担,所以您可能更喜欢通过虚拟机名称来搜索和定位,并对多个虚拟机同时完成修改的操作方式。例如,在如下的.PS脚本中,get-vm cmdlet 是用来查找所有以“ctx”文本开头的虚拟机,
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 31 of 44
并把找到的虚拟机传递给set-vm命令。这个操作将对那些命名为ctx01, ctx02,„„等等的虚拟机内存分配做调整。 例2
connect-viserver vc4nj.corp.com --user corp\\administrator --password vmware get-vm ctx* | Set-VM -MemoryMB \"1024\" -Confirm:$FALSE
Disconnect-VIServer –Server vc4nj.corp.com -Confirm:$FALSE
更加精简的脚本方式是,并不指定特定的内存数量,而是通过检查虚拟机内存数量并设置在特定的条件下减少内存分配数量。
例如,假设我需要把分配给恢复的虚拟机的内存数量全部减少为原来的一半。如下的脚本就可以自动查询现在分配给虚拟机的内存数量,然后减少为50%。通过查找虚拟机名字中的ctx*字符串来定位并查询现在为虚拟机分配的内存数量,然后使用set-vm cmdlet实现正确的设置。 例3
connect-viserver vc4nj.corp.com --user corp\\administrator --password vmware Foreach ($VM in Get-VM ctx*){
$NewMemAmount = $VM.MemoryMB / 2
Set-VM $VM-MemoryMB $NewMemAmount -Confirm:$FALSE }
Disconnect-VIServer –Server vc4nj.corp.com -Confirm:$FALSE
在我的环境中,最终采用了最后一种方法来控制分配给CTX虚拟机的内存。这里我想感谢来自英国的Al Renouf,是他帮助我编写了最后一个例子中的脚本。或许您不知道Al是谁,他对PowerShell非常的熟悉,而且他的Virtu-Al blo博客也非常值得一读。 在下一步中要完成的是,让这些PS文件可以被SRM调用。相比SRM直接调用这些.PS脚本的方式,我更喜欢创建一个.cmd/.bat文件,然后通过该文件在合适的时机调用。这种方式可以减少在编写命令脚本程序时的代码行。通过在.cmd/.bat文件中使用变量,我可以多次使用它来调用保存在SRM服务器上的.PS文件。 步骤1:创建一个可重定向的.bat文件
我第一次关注可重定向的.bat方式是在阅读一个博客(Carter Shaklin's PowerCLI blog)中,那里讨论了如何在vCenter Alarms中使用.PS脚本。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 32 of 44
在Virtu-AL主页的帮助下,我创建了一个可以引用我的.PS1脚本的.bat文件。该脚本会加载微软的Powershell环境,同时启动PowerShell控制台文件(.psc1,该文件使得VMware PowerCLI可以正常工作)。通过末尾的变量字符串“%1”,可以在同一个重定向的.bat文件中实现对所有.PS1文件的调用。
@echo off
C:\\WINDOWS\\system32\\windowspowershell\\v1.0\\powershell.exe -psc \"C:\\Program Files\\VMware\\Infrastructure\\vSphere PowerCLI\\vim.psc1\" \"& '%1'\"
步骤二:把.bat重定向文件和powercli.ps脚本拷贝到恢复站点的SRM服务器上 下一步是要完成把redirect.bat 和 .PS文件拷贝到恢复站点SRM服务器上。相对来说,您把这些文件拷贝到什么地方并不重要,只要您在脚本中正确地键入了文件路径,那么当您在恢复计划中键入命令并执行后,它们就会毫无差错地运行起来。
在这个演示中,ctx01-ram.ps1, ctx-bulk-ram.ps1 和 ctx-ram-half.ps1分别代表了如上讲过的三种不同处理方式。 步骤三:在恢复计划中加入命令
1.在Recovery Steps页的恢复计划中,选择Recovery High Priority Virtual Machines
2.点击Add Command Step按钮
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 33 of 44
点击看大图
3.在翻译器中键入您希望执行的.bat和.ps文件的完整路径。
注:在本例中,因为对话框比较小而文件的路径非常的长,所以文件部分被覆盖了。完整命令应该是: c:\\windows\\system32\\cmd.exe /c c:\\redirect.bat c:\\ctx-ram-half.ps1,这在恢复计划中也可以看到。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 34 of 44
点击看大图
.PS脚本的位置是非常重要的,它必须在对高、中或低优先级虚拟机恢复之前被调用。否则的话,.PS脚本将会对占位符.vmx文件做修改,而不是修改原始的虚拟机.vmx文件。请牢记,在\"Prepare Storage\"步骤里,占位符.vmx文件是无法在vCenter中注册的,原始的虚拟机.vmx文件会占据该位置。因此,所有对占位符.vmx文件所做的修改都会被忽略和抛弃。
或许您对SRM自动运行这些脚本感到不太放心。另外一种方式是在恢复计划中输入这些信息并手动执行。
另外,您可能希望了解如何在vCenter中实现PowerShell .PS文件的验证。在演示中,我把问题简单化了:通过把用户名和密码以纯文本的形式保存在.PS文件里。其实PowerShell有很多种实现验证的方法,但是这些都不是必要的。(Carter Shanklin的博客讨论了如何使用这种方式来存储经过加密的认证信息,这样的话用户名和密码就不用直接出现在.PS文件中了。)
警告:最后,请考虑使用PowerCLI调整虚拟机在故障回切时所造成的影响。当您决定切回到被保护站点的时候,所做的这些改变也被同时复制到被保护站点。请牢记,我们为了改变虚拟机内存分配而对VMX文件做了修改。作为故障回切操作的一部分,我们需要考虑到所有在恢复站点所做的修改在回切时也被反向复制回了被保护站点。为了防止这种情况出现,您需要一个PS脚本文件来完成对恢复计划中所做修改的“释放”过程。 结论:
您已经看到,在执行恢复计划时,通过结合VMware SRM,PowerCLI可以实现对虚拟机和vSphere4平台的各种定制和修改方式。而且,它的作用还不限于此。在PowerCLI Update1,加入了称为invoke-vmscript的新cmdlet。它可以允许我们在已经完成恢复的子系统虚拟机上调用PowerShell和其他脚本程序。这将是我们在下一篇中讨论的问题!
(作者:Mike Laverick 译者:李哲贤 来源:TechTarget中国) 原文标题:如何用VMware PowerCLI脚本来定制SRM恢复计划
原文链接:http://www.searchvirtual.com.cn/showcontent_32266.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 35 of 44
VMware管理员必备:借助PowerCLI配置标准交换机
为了说明本文的主旨,最佳的办法是给出一个实例,接下来,TechTarget特约作者Mike Laverick通过例子看看问题如何产生的。在周一的早上,老板通知你由于新项目的需求将要创建一个新的虚拟LAN(VLAN)。而在我们的VMware集群中共有32台ESX主机,而且是可以支持分布式资源调度(DRS)和高可用(HA)的VMware集群,那么您需要跨所有的32台ESX主机上创建新的VLAN,同时创建指定的端口组VLAN20。
当然,如果您使用了VMware vSphere4和新的vNetwork Distributed Switches,给分布式交换机增加端口组仅仅是一项琐碎的小工作,只需要稍等一会,它就会自动为每台ESX主机添加。但是,即使您使用的是vSphere 4,也可能无法实现自动的过程,因为分布式交换机只有在最昂贵的vSphere版本中才会激活,即Enterprise Plus版本。 如果没有Enterprise Plus版本,您被迫需要使用标准的交换机技术。那么请遵循以下的步骤,在VMware Infrastructure Client或vSphere Client中操作:
1. 2. 3. 4. 5. 6.
选择ESX主机;
选择Configuration页;
在Hardware Pane中选中Network选项; 选择Standard vSwitch的参数;
通过运行向导来增加端口组(在这些步骤之外,该向导还有额外的三步操作); 花费整个早上的时间用于不断地重复步骤1-5在其余的31台ESX主机上。当然,执行一个重复的工作进程是非常枯燥的事情,而且还带有极大的风险可能会发生人为错误。当人们不断地去重复某项工作时,出错误的概率会极大地上升。
PwoerCLI如何拯救这个过程?
VMware在客户体验上很糟糕的一点就是总让管理员不断地面临这种状况。但是这并不是完全无能为力——通过使用一组PowerCLI代码,管理员可以在几分钟的时间内完成这个工作。
该过程的第一步就是学习如何在已存在的vSwitch中,为某台ESX主机添加一个端口组。接下来,就是把这个过程重复到集群中的每台ESX主机上,通过使用PowerCLI中的一个非常方便的“for-each”命令就可以把该配置改变应用到所有的ESX主机。为了达到这个目的,通过使用Get-VitualSwitch cmdlet命令来选择希望调整的目标vSwitch,然后配合使用New-VirtualPortGroup命令来创建端口组。
接下来要做的就是确保这个过程已经在指定集群的每台ESX主机上都正确运行。为了满足安全性和可靠性的需求,您需要采用必要的过滤机制来保证其它的无关ESX主机不会
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 36 of 44
执行该命令。该过滤机制主要用于通知到PowerCLI,只对数据中心里指定的VMware HA/DRS集群中的主机做操作。这五行命令如下:
connect-viserver vc4nyc.corp.com -username corp\\administrator -password vmware Foreach ($vmhost in (get-cluster -name \"AMD Cluster1\" | get-vmhost)) {
$vs = Get-VirtualSwitch -VMHost $vmHost -Name \"vSwitch0\"
$vlan = New-VirtualPortGroup -VirtualSwitch $vs -Name \"vlan20\" -vlanid 20 }
如上的脚本程序会查找名为“AMD Cluster1”中的每台ESX主机,然后通过Get-VirtualSwitch cmdlets命令来标示出哪台vSwitch需要被调整,紧接着通过New-VirtualSwitch cmdlets命令来创建端口组。最后脚本程序会重复执行直到队列中的所有ESX主机都执行了这些命令。
如果某些情况下确实需要对每个ESX集群中的所有ESX主机做更改。很简单,您只需把\"Get-Cluster –name \"AMD Cluster1\"这行删掉。然而,虽然说编写一个PowerCLI脚本可以对数据中心的每台ESX主机更改网络参数固然是一件很不错的事情,然而这样做的同时也为数据中心带来了非常大风险,一旦脚本没有获得很好的测试就会带来大的问题。请牢记:权力越大,责任也相应地越大。
(作者:Mike Laverick 译者:李哲贤 来源:TechTarget中国) 原文标题:VMware管理员必备:借助PowerCLI配置标准交换机
原文链接:http://www.searchvirtual.com.cn/showcontent_36690.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 37 of 44
最佳免费的VMware脚本和命令行工具介绍
无论是使用VMware ESX还是ESXi,VMware命令行和脚本——如vMA、Power CLI和vSphere Health Check——都可以辅助配置虚拟机、更好地管理VMware
vSphere基础架构和通过命令行自动完成管理工作。VMware为命令行和脚本提供三种免费工具,并且这些工具可以共享相同点。
在五种最佳虚拟化工具指南这部分,TechTarget中国的特约虚拟化专家David Davis将介绍VMware vMA、vCLI、PowerCLI和vSphere Health Check提供的管理和虚拟机自动处理能力。 图1
点击图片本身就能放大
VMware vMA:vSphere管理助手
VMware发布ESXi Hypervisor时,并不支持命令行接口。虚拟化技术提供商不得不为习惯使用CLI的管理员和其他用户(这些用户拥有运行在ESX服务器控制台内的代理)提供一种解决方案。VMware发布了虚拟基础架构管理助手(VIMA:Virtual Infrastructure Management Assistant)作为辅助设备,该设备可以运行Linux,也有和ESX控制台相同的命令行选项。除了使用VMware命令行工具,VIMA还提供Perl脚本,并且为这些脚本提供中心化储存池。
当vSphere 4发布时,VIMA重新命名为vMA,仍然有同样的效用,也仍然是VMware虚拟基础架构的免费CLI管理设备。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 38 of 44
更多地了解vMA,请阅读我的另外一篇文章:使用VMware vSphere管理助手(vMA)。
VMware vCLI:vSphere命令行接口
同样的VMware命令行工具可以安装在Windows或者Linux工作站上,VMware称这些工具为vSphere命令行接口(vCLI:vSphere Command Line Interface)。vCLI允许用户在PC机上运行传统的VMware工具,如esxcfg-nics或者vicfg-nics。
仅使用vMA,就可以有大量vCLI可供使用的贡献型脚本(接下来详细介绍)。 访问VMware的vCLI主页,可以更多了解vCLI,并且可以免费下载。 图2
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 39 of 44
VMware PowerCLI:PowerShell命令行接口
如果不使用Perl作为VMware工具脚本引擎,对于那些熟悉Microsoft
PowerShell的用户来讲,可以使用VMware的产品——PowerCLI。PowerCLI是基于PowerShell的工具,用来管理VMware基础架构。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 40 of 44
同vCLI和vMA一样,有大量PowerCLI可供使用的贡献型脚本。
访问VMware的PowerCLI主页,更多了解PowerCLI,也可以免费下载。 VMware的贡献型脚本存储池和vSphere Health Check脚本
拥有Perl和PowerShell脚本选项非常不错,但是如果在命令行中有有用的脚本库就更好了。值得感谢的是,很多VMware管理员在VMware社区贡献出所创建的脚本程序。例如,vGhetto script repository是最好、最大的VMware脚本存储池之一。尤其是该存储池里面有我见过最好的脚本:vSphereHealthCheck脚本。这个脚本可以查询ESX主机、vCenter服务器和集群,然后返回大量相关信息——提供一个对vSphere基础架构清晰、有条理的报告。但是需要有vMA、vCLI或者PowerCLI(使用的应该是vSphereHealthCheck PowerShell版本)才可以运行该脚本。
返回指南主页,了解更多最佳免费虚拟化工具。
(作者:David Davis 译者:王越 来源:TechTarget中国) 原文标题:最佳免费的VMware脚本和命令行工具介绍
原文链接:http://www.searchvirtual.com.cn/showcontent_29056.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 41 of 44
ESX与ESXi管理员必备25个命令
正如所有的虚拟化管理员都知道,要应对VMware基础设施上需要的更多虚拟化管理,关键在于任务的自动化。虽然VMware ESX主机可以管理与vSphere客户端用户界面,数据中心管理员往往喜欢登录到VMware服务控制台和使用ESX命令行来解决,如网络配置问题或重新配置主机。有几个VMware的命令,可以帮助这些任务自动化,解决虚拟化基础设施方面的问题,调整您的(虚拟机)和更多的虚拟机的性能。
在本指南中的VMware命令行,概述了25个最有用ESX命令和ESXi命令。其中包括Linux和ESX的特定命令,很多可以用于远程命令行界面(RCLI),vSphere已改名为vSphere CLI,可在VMware ESX和ESXi中使用。 Linux命令
ESX服务控制台是基于Linux的,因此许多Linux命令都可以在它里面使用。下面是常见的Linux命令和一些VMware命令的详细版本。
Find/cat/grep命令查找,显示和搜索文件。Find找出具体的文件,cat显示文件内容,并把文件拼接在一起,同时grep负责在拼接的所有文件中找到所需文本。这些命令可以帮助管理员发现,如基础设施快照文件的具体内容,也显示日志和配置文件。他们还可以搜索内部文件的信息。
Tail显示一个文本的最后部分的文件,也可以输出到监控实时文件。此命令有助于实时监控日志文件。
Service可以启动、停止和重新启动主机服务器上的服务(或程序)。一些常见的ESX服务包括MGMT的和VMware、vmware-vpxa、firewall、vmware-hostd和vmware Web Access。此命令可以重新启动服务,挂起或进行配置更改。
Nano和vi编辑文本文件。Nano是一个比Vi更简单且易于使用的编辑器,但Vi具有更强大的编辑功能。在ESX主机上文本编辑器帮助编辑配置文件。
Su和sudo命令帮助控制和防止root帐户被使用。Su提升了较差的用户帐户到超级用户的权限。sudo运行另一个在sudoers配置文件中指定的用户命令。
ls列出文件和目录信息。通过使用某些交换机,可以显示详细的文件资料,包括所有者、大小、权限和最后修改日期。
Df和vdf显示文件系统(分区)的资料,包括自由空间。 Df命令不会显示虚拟机文件系统
(VMFS)卷,因为它无法阅读。vdf是该命令的VMware的版本,这也将显示VMFS卷的信息。两个命令都可以使用H变换,可用易读的形式显示。(即2 GB,而不是2016044)
Ps和kill命令可以强行终止VM。 Ps可以显示主机状态或进程。它可以使用很多开关,但最常见的是EF,它可以显示每个进程运行的所有信息。 kill命令经常与PS命令一起用来终止某个正在运行的进程。
Ping和vmkping是最基本的网络故障排除命令。 Ping通过发送Internet控制消息协议数据包测试与其他主机和网络设备的网络连接。 Vmkping是VMware的Ping命令的特定版本。它使用的IP VMkernel去Ping另一个ESX主机的VMkernel端口。此命令有助于解决VMotion和网络存储的问题。
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 42 of 44
VMware ESX和ESXi命令
这些VMware ESX和ESXi的命令可以运行在ESX服务控制台(本地或远程使用Secure Shell)或RCLI(在VMware Infrastructure 3)和vSphere CLI的(在vSphere)。在RCLI和vSphere CLI中,注意到很多命令已更名为vicfg,而不是esxcfg -(即esxcfg - nics.pl和vicfg - nics.pl)。两个命令都执行相同的功能,但VMware试图从esxcfg迁移到vicfg。
vmkfstools被比做虚拟磁盘中的瑞士军刀,可用于复制、转换、重命名、输入、输出和调整虚拟磁盘文件的大小。
Esxtop故障排除。它提供实时的CPU、内存、硬盘和网络使用的历史表现的统计数字。
Esxcfg-nics观察和配置物理网络接口卡(NIC)。它显示网卡状态和配置的速度和全双工网卡。 Esxcfg-vswitch显示和配置虚拟交换机。它是在vSphere不能使用网络中有用的配置客户端。该命令用于配置端口组和连接物理网卡(称为上行)配置虚拟局域网ID,思科协议(CDP)和vswitch中的MTU。
Esxcfg-vswif和esxcfg-vmknic允许您查看和配置vSwitches特殊的端口组。 Esxcfg - vswif配置的ESX服务控制台网络接口,它也被称为vswif港口。 Esxcfg - vmknic配置VMkernel网络接口,这是VMotion和连接到iSCSI和网络文件系统的网络存储设备所必要的。
Vmware-cmd是一个复合管理命令,负责管理和检索虚拟机信息。它可以改变虚拟机电源状态、管理快照、注册和注销的用户,并检索和设置各种虚拟机的信息。
Vimsh和vmware-vim-cmd是复杂的命令,只有完全了解才能使用。 Vimsh是一个强大的交互式框架,有很多允许执行的命令,以及具备显示和配置能力。 VMware的vim - cmd是一种逻辑的vimsh,能够简化vimsh,无需知道很多前端交换命令。
Vihostupdate和esxupdate更新ESX和ESXi主机和打补丁。 Esxupdate用于ESX服务控制台和vihostupdate,通过RCLI / vSphere CLI使用。此外,vihostupdate35是用来修补ESX和ESXi 3.5版主机。
Svmotion是RCLI/vSphere CLI命令,用于发起Storage VMotion的迁移虚拟机虚拟磁盘到另一个数据存储空间。此命令的ESX 3.5版本是唯一启动SVMotion的方法,加上vSphere客户端的GUI,vSphere能做到这一点。
Esxcfg-mpath显示和设置一台主机从所有路径到达它的存储设备。
Esxcfg-rescan让主机产生一个特定的存储适配器,用来发现新的存储设备。这是非常有用的工具,存储设备已被添加,删除或从存储网络改变。
Esxcfg-scsidevs和esxcfg-vmhbadevs显示连接到主机的存储设备的资料。 Esxcfg - vmhbadevs用于ESX 3.5,在vSphere中被 esxcfg-scsidevs取代。
Esxcfg-firewall显示信息和配置内置的防火墙保护ESX服务控制台。它允许和阻止特定的TCP /IP服务之间的控制台和其他网络设备端口。
Esxcfg-info命令提供了有关运行中的主机信息。它可以重新定向到一个文本文件记录主机配置。 Esxcfg-auth在ESX主机上配置服务控制台验证。它可以配置第三方LDAP或Active Directory服务器的身份验证并设置多个本地安全选项。
Vm-support是一个强大的信息收集工具,常用于故障排除。该命令收集大量信息、日志文件,并把很多命令以单一的tgz存档文件方式输出。它也可以用来显示VM的信息以及停止没有响应的虚拟机。
上述命令有很多不同的语法、选择和变化。有了它们,你的工作将事半功倍。欲了解更多有关这25个ESX和ESXi的命令的信息,请查看以下文件:
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 43 of 44
VSphere命令行界面安装和参考指南 ESX配置指南(附录) Linux命令目录
(作者:Eric Siebert 译者:李可嘉 来源:TechTarget中国) 原文标题:ESX与ESXi管理员必备25个命令
原文链接:http://www.searchvirtual.com.cn/showcontent_31129.htm
TT虚拟化技术专题之“VMware脚本(PowerCLI)管理手册” Page 44 of 44
因篇幅问题不能全部显示,请点此查看更多更全内容