使用PowerShell与PowerCLI自动化主机服务器任务

日期: 2010-11-25 作者:Hal Rottenberg翻译:唐琼瑶 来源:TechTarget中国 英文

这是关于PowerCLI的另一篇技巧,你还记得PowerCLI吗?它是为Windows PowerShell脚本语言而创建的嵌入单元。这个嵌入单元能让你快速轻松地将vSphere环境的所有方面进行自动化。今天的文章介绍如何使用PowerShell和PowerCLI对主机服务器进行自动化操作。   VMware说法中的主机服务器是个提供虚拟化服务的系统。

也就是所说的hypervisor,当然这种情况下就是VMware的产品ESX Server。PowerCLI能管理ESX Server的各种版本,从3.0开始,包括“瘦”版本ESXi。以前你可以使用PowerCLI管理VMware Server(……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

这是关于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-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查看,有四个参数能让你快速诊断系统健康状况。

  如同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。最终结果将会显示宿主在某台主机服务器上的虚拟机列表。例如:

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

相关推荐