APP下载

实战PowerCLI 管理虚拟机

2020-01-15顾武雄

网络安全和信息化 2020年1期
关键词:快照客体命令

顾武雄

在计算机系统的世界里,尽管友善的窗口界面设计打败了以命令操作为主的各类系统,但在企业网络环境中窗口设计的主要使用对象是一般客户端,而非IT 单位的信息管理人员。因为对于一位资深的IT 任务者而言,无论后端的操作平台为何,从过去、现在甚至是未来的网络世界,命令管理控制台才是真正掌控IT 整体自动化维运的最佳选择。凭借本文的指引,让我们暂时抛开对于VMware vSphere Client的依赖,一同学习如何使用更强大的PowerCLI 命令管理控制台,来更有效率地管理vSphere 6.0 架构下的虚拟机。

PowerCLI 简介

什么是VMware vSphere PowerCLI 呢?简单来说它就是一个创建在以Windows PowerShell 为基础的命令管理界面,让管理人员可以通过内置的400 多个命令工具,来远程连接管理vSphere 虚拟化环境与VMware vCloud Director。高级者还可以通过其内置手稿的范例程序与函式库,来创建自动化操作维护程序。

VMware vSphere PowerCLI 6.0 Release 1 主要有以下两个组件所构成:

1.vSphere PowerCLI 是PowerCLI 程序包的核心组件,它包含了管理vSphere各项命令(cmdlets)功能所需要的模块与管理单元:

(1)VMware.VimAutomati on.Core:提供有关vSphere环境自动化操作管理命令。

(2)VMware.VimAutomati on.Vds:提供有关vDS(virtual Distributed Switch)与Port Group 管理的命令。

(3)VMware.VimAutomati on.Cis.Core:提供有关vCloud Suite SDK 服务器的管理命令。

(4)VMware.VimAutomati on.Storage:提供有关在vSphere 架构中以策略基础的存储管理命令。

(5)VMware.VimAutomati on.HA:提供Get-DRMInfo 命令让管理人员可以取得针对DRS(Distributed Resource Management)所Dump 出来的信息。

(6)VMware.VimAutomat ion.License:提供Get-Lice nseDataManager 命令来管理有关VMware 授权的组件。

(7)VMware.ImageBuilde r:提供映像设置、depots 以及VIBs 方面的管理命令。

(8)VMware.DeployAutom ation:针对ESXi 软件与物理主机的配置管理,提供一个命令界面来管理自动化部署操作。

2.vCloudPowerCLI:此为PowerCLI 6.0 安装时的一个选用组件,主要是针 对vCloud Director 与vCloud Air 的自动化管理功能,提供了VMware.VimAutomation.Cloud 与VMware.VimAutomation.PCloud 两大模块与相关命令。

接着就让我们一同来学习一系列有关于以PowerCLI,远程连接管理vSphere 虚拟化操作环境的各种技巧吧。

安装PowerCLI

默认当我们安装vSphere Client 在Windows 计算机时并没有提供PowerCLI,想要使用它必须自行到VMware 的官方网站上,搜索“PowerCLI”关键词来找到最新版本的下载点。页面中可以查看到它的程序包大小大约在57MB 左右,请点击[Download Now]按钮来下载即可。

以PowerCLI 6.0 Release 1 程序包的安装需求而言,在服务器类的操作系统部分必须是Windows Server 2008 R2 Service Pack 1 或是Windows Server 2012 R2。在客户端的操作系统部分则必须是Windows 7 Service Pack 1 或Windows 8.1,且还必须确认已经安装了Microsoft.NET Framework 4.5 以上版本,然后搭配Windows PowerShell 3.0 或4.0 版本的使用即可。

此外如果您想要执行一些关于Guest 方面的命令,在虚拟机的客体操作系统之中,则必须注意它目前仅支持Windows Server 2008 R2 Service Pack 1(64-bit)与Red Hat Enterprise Linux 5.10(64-bit),且Guest 相关命令的使用目前并不支持IPv6 网络环境。

在PowerCLI 6.0 的安装过程中应该会先出现相关提示页面,请点击[Install]来完成[VMware Remote Console Plug-in 5.1]程序包的安装。接着此程序包的浏览器附加组件将会启用在IE、Chrome、Firefox 三种浏览器之中。

在开始进入到PowerCLI 6.0 的安装设置之前,可能会出现有关目前此计算器PowerShell 执行策略设置的警告信息,关于这项问题笔者留待安装后再来解决。点击[Continue]。在[Custom Setup]页面中,可决定是否要加选[vCloud Air/VCD PowerCLI]的命令管理组件,基本上如果您公司没有在使用此云端服务,便可以使用默认来完成安装即可。点击[Next]后再点击[Install]即可。

完成PowerCLI 6.0 的安装之后,以Windows 8.1或Windows Server 2012 R2 来说,您将可以在[开始]画面下的[应用程序]列表中找到它,建议您可以将它固定在[开始画面]或是[任务栏]之中。首次的执行应该会出现无法加载Initialize-PowerCLIEnviroment.ps1 的错误信息,此问题的发生其实就是前面安装过程中所关联的警示信息。

我们必须修改PowerShell 的执行策略,不过在修改前可以先执行Get-ExecutionPolicy 命令,来查看目前所应用的执行策略,

在默认的状态下便是Restricted,您可以根据官方的建议执行Set-ExecutionPolicyRemoteSig ned,来开放远程已签署的脚本即可,或者也可以执行Set-ExecutionPolicy -Exec utionPolicy Unrestricted来完全取消执行策略的限制,不过如此一来如果不小心执行到恶意的脚本程序,便会对于系统造成危害。

PowerCLI 初次使用

成功解禁PowerShell执行VMware 脚本的限制之后,您可能会想先知道究竟有哪一些命令可以用来管理VMware vSphere 虚拟化环境。请执行Get-VICommand命令,便会列出vSphere 架构下所有可用的命令清单,每一个命令都有相对应的类型与所属模块名称。

接着让我们执行第一个最重要的命令,那就是连接到选定的vCenter Server主机。您可以直接执行Connect-VIServer 命令,然后再根据系统提示完成vCenter Server 的IP 地址以及管理员账号密码的输入即可。至于如果您想要使用一串命令完成登录,则可以直接在命令后面搭配-Server -User <管理员账号>-Password <密码>参数即可。

图1 查询特定命令范例

确认连接登录vCenter Server 之后,您将可以开始进行旗下所有ESXi 主机、数据中心、群集、虚拟机、存储设备、数据存放区、网络等管理。然而在可用的命令与用法非常多的情况之下,您似乎不可能记住每一则命令的使用方法,这时候就得仰赖Get-Help 命令的协助,来随时告诉我们任一个命令完整介绍。例如您只要执行Get-Help Get-VMHost,便可以立即看到关于Get-VMHost 命令的完整说明,但是如果您只是想查看该命令的使用范例,则可以像如图1 所示一样搭配-Examples 参数的使用即可。

提 到Get-VMHost,它 可是管理员最常使用的命令之一,单独的执行下可以知道在目前的vCenter 架构下有哪一些ESXi 主机,且可以查看到每一部主机的IP 地址、连接状态、电源状态、CPU数量、CPU 总资源、CPU 使用率、总内存大小、内存使用率以及ESXi 系统板本。另一个常见的用法则是将选定的独立ESXi 主机纳入vCenter 的管理,您只要执行Add-VMHost -Name Host-Location (Get-Datacenter Datacenter) -User root-Password password 命 令格式即可,其中来源的主机名(Host)、root 账号、密码以及目的地的数据中心名称(Datacenter) 必须输入正确。

在Windows PowerShell 中使用

在默认的状态下PowerCLI 所使用命令窗口是传统的命令行(Cmd),使用其来并没有先进的Windows PowerShell 窗口来得便利,就以一个最简单的窗口大小调整,传统的Cmd 命令提示窗口就显得相当笨拙,虽然这项设计已知在Windows 10以及Windows Server 2016版本中将获得大幅改善,但恐怕也得需要PowerCLI 的更新版本来兼容于它们。

在此之前最理想的操作界面肯定是Windows PowerShell。然而当我们直接开启Windows PowerShell来执行PowerCLI 任何命令时,肯定会出现没有此命令的错误信息,这是因为我们尚未加载它的相关组件,您只要执行 Add-PSSnapinVMware.VimAutomation.Core 与Add-PSSnapinVMware.VimAutomation.Cloud两个命令即可,其中Add-PSSnapinVMware.VimAutomation.Cloud 命令是选用的组件,也就是用来管理vCloud 的管理单元,必须搭配PowerCLI 的自定义安装设置才可以,如果不需要,是可以省略的。若是想要查看已成功注册的管理单元,只要执行Get-PSSnapin-Registered 命令即可。

完成vSphere PowerCLI组件注册之后,您可以分别执 行Get-Command -Noun VM 与Get-Command -Module VMWare* 两个命令参数,来查看一下与VM 名词以及与VMware 模块有关的命令列表。如果有显示出像范例中的执行结果,即表示您已经可以在Windows PowerShell中,使用vSphere PowerCLI组件下的各种模块命令,来远程连接管理vSphere 所有ESXi 主机与虚拟机。

最后请尝试执行Connect-VIServer 命令来连接登录选定的vCenter Server,然后再执行Get-VMHost 与 Get-VM 两个常用命令,来测试看看是否能够取得目前所有ESXi 主机以及虚拟机列表。

管理虚拟机的PowerCLI 命令

在PowerCLI 众多的命令集合中,最常用的肯定是与虚拟机管理有关的命令,其中光是一个Get-VM 命令,就会使用到因应许多不同需要的命令组合。在尚未搭配任何参数时,可以得知在目前vCenter 管辖内的所有需机器清单,并且可以知道每一部虚拟机的电源状态、配置的CPU 数量以及内存的大小。

当虚拟机数量很多时,您可能只想查看某一部ESXi主机的虚拟机列表,这时候就可以执行Get-VMHost"192.168.7.251" | Get-VM 命令,来取得选定ESXi主机下的虚拟机列表,其中ESXi 主机的表示方式,可以使用IP 地址、主机名或是完整的域名(FQDN)。若是想要查看某一个资源池中的虚拟机清单,则可以执行Get-ResourcePool "测试池" |Get-VM 命令来查询,其中资源池的名称即便是以中文命名,一样可以正常进行各种管理。

对于虚拟机的创建如果以PowerCLI 的命令来执行,肯定会远比通过vSphere Web Client 界面的操作来得有效率,因为您只要事先准备好下列命令范例,甚至于把它存储成一个PS1 的手稿程序来执行,就可以大幅节省掉使用鼠标点击设置的操作时间。在这个范例中除了有选定新虚拟机所有存放的主机位置之外,还特别选定了一个现有的资源池(选用),当然其它像是虚拟机的名称、虚拟硬盘的大小与格式、数据存放区位置、虚拟内存大小、虚拟CPU 数量以及所使用的虚拟网络皆是必要的参数设置。

既然能够以命令参数来创建新虚拟机,当然也就能够删除现有已在关机状态下的任何虚拟机。例如您只要执行Remove-VM CentOS -DeletePermanently 命令参数,来永久删除一个名为CentOS 的虚拟机以及所属的虚拟硬盘文件,若想要保留虚拟硬盘文件,则只要拿掉-DeletePermanently 参数即可。至于针对现行虚拟机设置的修改,则可以使用Set-VM 命令来完成,例如您可以执行Get-VM -Location ResourcePool01 | Set-VM-MemoryGB 4 -NumCPU 2,来将ResourcePool01 资源池中的所有虚拟机之内存调整至4GB,以及CPU 数量调整至2 个。

高级命令管理虚拟机

另一种参数的用法则是可以用来筛选特定的字段信息,那就是搭配Select-Object 命令的使用,它可以应用在各种查询命令的使用,例如您可以执行Get-VM | Select-Object Name,PowerState 命令,即可对于取得的虚拟机列表信息,例如仅显示名称以及电源状态的字段数据。

既然知道了各虚拟机的电源状态,便可以随时以命令的执行方式,来对于选定的虚拟机进行关机、暂停以及启动等操作。例如您想要对一个名为SharePoint的虚拟机进行正常关机,就必须执行Stop-VMGuest SharePoint 命令而不是Stop-VM SharePoint,因 为前者是发送关机命令至客体操作系统,而后者则是直接强迫关机,不过想要让Stop-VMGuest 的命令能够成功执行,该虚拟机必须确认已经安装了VMware Tools 才可以。

至于虚拟机的启动可以执行Start-VM 命令,而暂停运行并将状态存储则可以执行Suspend-VM 命令即可。

此外如果您是刚通过命令方式创建了新虚拟机,并且准备安装全新的客体操作系统,在启动虚拟机之前一定要先将ISO 安装映像档,挂载至此虚拟机的虚拟光驱连接之中,例如这时候您就可以执行New-CDDrive -VM"Windows 8.1" -ISOPath"[VM-Storage]tw_windows_8_1_enterprise_x64_dvd_2971872.iso" -StartConnected 命令,来将选定的Windows 8.1 安装映像档完成挂载与连接。当然前提之下是您已经先将此ISO 文件上传至所描述的数据存放区之中。

在虚拟机正常运行的过程之中,如果发生了所在的ESXi 主机需要停机维护时,您便须要先将虚拟机迁移至群集中的另一台ESXi 主机中,然后让来源的ESXi 主机进入到维护模式后,再完成正常停机即可。此时就得发挥vMotion 的强大功能,让虚拟机可以在不停机的状态下,直接在线迁移至另一部ESXi 主机来继续运行。

下列的命令参数范例,便是将一个名为SharePoint的虚拟机,在线转移至群集中的另一部ESXi 主机之中。

如果您是打算将此虚拟机在线迁移到特定的资源池,则可以参考以下这个命令范例:

PowerCLI 管理虚拟机模板

为了方便虚拟机的快速创建,最好的做法就是先将一些常用的Windows 客体操作系统,制作成虚拟机模板,如此一来往后需要同样客体操作系统版本的新虚拟机,就可以直接使用现行的模板来产生即可,然后在初次的启动过程中完成计算机名称以及TCP/IP 地址等设置即可。若是您想知道在目前的vSphere 架构下,有哪一些可用的虚拟机模板,同样也可以经由命令参数的执行来查询。

举例来说如果您想要查询选定数据中心下,所有以W 为开头的虚拟机模板清单,只要执行Get-Template-Name W* -Location Datacenter

如果您是想要创建新的虚拟机模板,在选定的数据中心下,执行以下的命令参数,来将现行一个名为SharePoint 的虚拟机,复制一份成为选定数据中心下的VMTemplate01 模板。

New-Template -VM SharePoint -Name VMTemplate01 -Location(Get-Datacenter Datacenter)

未来如果需要将此虚拟机模板彻底移除掉,只要执行以下命令参数范例即可。

Remove-Template-Template "VMTemplate01"-DeletePermanently

此外您也可以选择将选定的VMTemplate01 虚拟机模板,转换成正式运行的VM01 虚拟机,只要执行Get-Template VMTemplate01 |Set-Template -ToVM -Name VM01 命令参数即可。相反的如果是要将一个名为SharePoint 的虚拟机,转换成名为VMTemplate01的虚拟机模板,则可以执行Set-VM -VM SharePoint-ToTemplate -Name"VMTemplate01"命令参数。

不过必须注意的是这样的做法,将会使原有的SharePoint 虚拟机消失掉,因为已经被转换成模板了。

PowerCLI 管理虚拟机快照

您可以执行以下命令,来为一个名为SharePoint的虚拟机,添加一个名为"Snapshot001" 的快照与描述说明。

当然您也可以针对选定的ESXi 主机或是资源池,批量完成旗下所有虚拟机的快创建,下列范例便是对于一个名为“测试用池”的资源池,在取得所有虚拟机清单的同时,为它们皆创建一个名为“Snapshot001”的快照。

说到虚拟机的快照文件,当数量一多时它们还真是蛮占用存储空间的,这时候您可能就需要清除一些旧的快照。可参考执行下列命令范例,来将SharePoint 这个虚拟机中的第一个快照进行删除。当然您也可以一次批量删除选定资源池或主机中的快照,只要它们皆使用了相同的快照名称即可。

尽管虚拟机快照功能并不适合用来作为备份用途,但对于重要的系统状态存储却是非常好用,因为它神速般的还原机制可不是任何备份软件所能取代。

同样的我们也可以将选定池的所有虚拟机全部皆还原选定的快照备份,您可以参考以下范例。

PowerCLI 查询客体操作系统

许多时候我们对于大量虚拟机的管理,需要先了解这一些虚拟机客体操作系统的详细信息,或是关于VMware Tools 的版本信息,因为许多与应用程序的大量部署或系统集成方面的管理,都要求必须事先调查好这一些相关信息,以避免在部署操作的过程之中发生错误。首先可以通过执行Get-VM | Get-VMGuest 的命令,来取得目前所有虚拟机的客体操作系统版本信息,而且也可以知道它们的IP 地址。在此您可能会发现为何有一些客体操作系统的IP 地址没有出现,其实这是因为这一些虚拟机目前尚未启动所致。

取得上述客体操作系统一般信息,对于许多应用程序的大量部署应该已经足够,但可能无法满足一些高级代理程序的部署需要,例如某一些第三方的资产管理系统或服务监控系统。这时候您可以执行Get-VMGues Ubuntu-VM | fc | more,来取得这一个名为Ubuntu-VM的客体操作系统完整信息,这里头将会清楚程列出它的计算机名称、IP 地址(包括IPv6)、Mac 地址、硬盘空间信息、虚拟机ID、使用的虚拟网络界面,以及是否启用了网络唤醒功能等等。

接着如果您是想要取得所有虚拟机的VMware Tools版本信息与状态,可以参考下列命令范例。执行后就可以从[版本状态]字段之中,知道哪一些虚拟机是尚未受到管理的,以及哪一些已是最新或是已过期的VMware Tools 版本。

上述的范例并没有设置过滤特定的条件,而以下命令与参数范例,则是添加了Where-Object 叙述,来唯一取得需要更新VMware Tools版本的虚拟机清单,也就是工具状态是“ToolsOld”。当然您也可以改使用工具版本状态的域值来判断。

PowerCLI 命令管理虚拟硬盘

数据存放的管理在虚拟化平台上是相当重要的一环,因为若是无法彻底掌控,影响的层面不仅是存储空间吃紧的问题,更会进一步让I/O 运行的性能大打折扣,尤其是在企业级SSD 的存储架构之下更是显著。因此我们首先第一步必须先清楚所有虚拟硬盘的分布情况,您可以像如图2 所示一样,执行以下命令范例来检视选定数据存放区中的虚拟硬盘清单,藉此可以掌握到每一个虚拟硬盘所属的虚拟机,以及所设置的容量大小与类型。值得注意的是其中的-DatastorePath 参数,除了需要选定数据存放区名称之外,还有选定完整的目录路径,例如您可以选定"[VM-Storage]VMDKs/SharePoint/"

确实掌握了每一个虚拟机硬盘的位置、大小以及类型之后,对于虚拟机的管理,您可能随时会需要对于某一个或特定主机或所有虚拟机,来添加一个选定大小的虚拟硬盘,这时候就可以先设置好一个存储虚拟机列表信息的变量,然后再搭配使用New-HardDisk 命令以及相关参数,让所取得的虚拟机清单一次完成虚拟硬盘的添加。

图2 取得选定存放区的虚拟硬盘清单

既然可以一次帮多个虚拟机批量完成虚拟硬盘的添加,当然也就能够一次帮多个虚拟机批量移除掉选定的虚拟硬盘。每一个虚拟硬盘的移除皆会出现确认提示,如果想要直接一次完成全部的删除操作,只要输入A 即可。

至于如果想要批量复制多个虚拟机的硬盘文件到选定的数据存放区路径下,可以参考这个Get-HardDisk-VM $vm | Copy-HardDisk"[ VM-Storage]/"命令范例的使用。

如果虚拟机硬盘的批量容量修改,则可以参考这个Get-HardDisk -VM $vm |Set-HardDisk -CapacityGB 60 命令范例。

Virtual SAN 相关命令:针对新版Virtual SAN 6.0 与其相关磁盘的管理操作,目前已可以通过Get-VsanDisk、Get-VsanDiskGroup、New-VsanDisk、New-VsanDiskGroup、Remove-VsanDisk、Remove-VsanDiskGroup 六大命令与相关参数的搭配使用来完成设置。未来版本的PowerCLI 将不再继续提供的命令有Get-VMGuestNetworkInterface、Set-VMGuestNetworkInterface、Get-VMGuestRoute、Remove-VMGuestRoute。

结论

未来不管VMware vSphere 会持续发展到哪一个版本,相信PowerCLI 工具的版本也同样会一直往上发展,因为即便架构再大再复杂的vSphere 虚拟化环境,对于一位熟悉PowerCLI 的系统管理人员来说,只要事先写好因应各种管理需要的Script,就能够轻松处理好平日各种维运上的疑难杂症,一点也不会受到架构规模大小的影响。进一步甚至于可以结合Window PowerShell 的使用,一并解决Active Directory集成管理需求,以及所有运行中的Windows Server客体操作系统的自动化维运任务。别再迟疑了,赶紧动手来学习吧!

猜你喜欢

快照客体命令
社会公正分配客体维度与道德情绪的双向互动
面向Linux 非逻辑卷块设备的快照系统①
EMC存储快照功能分析
只听主人的命令
安装和启动Docker
浅议犯罪客体
移防命令下达后
一种基于Linux 标准分区的快照方法
解析Windows10的内部命令
让时间停止 保留网页游戏进度