掌控PowerCLI:使用Get-VM来管理虚拟机

日期: 2010-11-24 作者:Hal Rottenberg翻译:李哲贤 来源:TechTarget中国 英文

如果您刚刚开始应用PowerCLI管理VMware环境,需要学习的内容很多。下面,我们学习掌握一个最常见和最重要的cmdlets。   在上一篇文章中,TechTarget中国特约作者Hal Rottenberg推荐您使用PowerCLI,希望可以激发您进一步研究的兴趣。今天将继续讲述工具箱中最重要的一个cmdlet:Get-VM 。

PowerShell自带有非常全面的帮助系统,因此让我们借助它来对Get-VM进行整体了解。如果您希望和我一起开展,现在请从开始菜单中打开PowerCLI,如截图所示:   在PowerCLI窗口中,我从帮助文件中提炼了一些关键字段。   (编者注:为便于读者定位……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

如果您刚刚开始应用PowerCLI管理VMware环境,需要学习的内容很多。下面,我们学习掌握一个最常见和最重要的cmdlets。

  在上一篇文章中,TechTarget中国特约作者Hal Rottenberg推荐您使用PowerCLI,希望可以激发您进一步研究的兴趣。今天将继续讲述工具箱中最重要的一个cmdlet:Get-VM 。PowerShell自带有非常全面的帮助系统,因此让我们借助它来对Get-VM进行整体了解。如果您希望和我一起开展,现在请从开始菜单中打开PowerCLI,如截图所示:

PowerCLI

  在PowerCLI窗口中,我从帮助文件中提炼了一些关键字段。

  (编者注:为便于读者定位,我们从帮助文件中提取了相关代码并整理到一个txt文件中,从这里您可以访问。它被分成了四个部分,因此您可以理解作者所讲的是哪一段代码。)

  注:“PS>”代表了命令提示符,之后紧跟的文本是我所输入的。其它的都属于由之前输入的命令产生的输出结果。

  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中的所有内容都可以称为对象。每个对象中又有成员,而成员中包含了属性和方法(以及其它的一些东西)。如果您从未接触过面向对象的程序设计,让我们从一组基础的定义开始:

  属性——某个对象的属性。属性会有一些跟它相关的值。例如,“汽车”是一个对象,“车体颜色”是它对应的属性,而“白色”就是这个属性的值。

  方法——可以对某个对象进行的动作。通过执行方法可以达到期望的动作。例如,对象“汽车”的方法之一是“加速”。执行这个方法可以使汽车向前移动。

  在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来完成对虚拟机的设置。

翻译

李哲贤
李哲贤

TT虚拟化特约作者

相关推荐