这是关于PowerCLI的另一篇技巧,你还记得PowerCLI吗?它是为Windows PowerShell脚本语言而创建的嵌入单元。这个嵌入单元能让你快速轻松地将vSphere环境的所有方面进行自动化。今天的文章介绍如何使用PowerShell和PowerCLI对主机服务器进行自动化操作。 VMware说法中的主机服务器是个提供虚拟化服务的系统。
也就是所说的hypervisor,当然这种情况下就是VMware的产品ESX Server。PowerCLI能管理ESX Server的各种版本,从3.0开始,包括“瘦”版本ESXi。以前你可以使用PowerCLI管理VMware Server(……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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
翻译
相关推荐
-
自动化之旅:选择正确的IT自动化工具
在企业中,老生常谈的“少即是多”通常是正确的,IT也不例外。这意味着寻求使用已有资源响应不断增加的资源需求,效率往往更高。
-
使用VMware vRealize Orchestrator编写工作流脚本指南
VMware vRealize Orchestrator还可以完成许多其他任务,但是首先推荐你学习JavaScript,因为vRO当中的所有功能都需要使用JavaScript。
-
五大免费的PowerShell资源与工具
现在大多数人要应对席卷数据中心的“虚拟化潮流”,它改变了我们部署应用程序的方式。
-
访谈录:PowerCLI如何满足VMware管理员的自动化需求
服务器虚拟化技术大大减轻了系统管理员的工作负担,但是对于运维团队来说,在维护现有系统的同时还需要处理来自业务部源源不断的全新需求。