当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerCLI 教程:VMware 新手管理指南

作者:精品下载站 日期:2024-12-14 20:51:00 浏览:14 分类:玩电脑

PowerCLI 教程:VMware 新手管理指南


VMWare 的 PowerCLI 正在成为 ESXi 支持的硬件的虚拟机管理程序虚拟化管理员的普遍界面。了解如何通过 PowerShell 和 PowerCLI 管理 VMware 是对您的工具包的有力补充。在本 PowerCLI 教程中,您将学习如何做到这一点。

在本教程中,您将学习:

  • 使用 PowerCLI 连接到 VMware 基础架构的基础知识
  • 熟悉使用 VMware 对象的 cmdlet
  • 赋予自己探索知识的力量
  • 通过 PowerCLI 进一步管理 VMware

让我们开始吧!

您需要拥有和了解什么

在您深入了解本 PowerCLI 教程之前,确保您和我都达成共识始终很重要。对于本文,我将假设:

  • 您拥有基本的 PowerShell 经验。无论如何,您不必成为 PowerShell 专家,但您对 PowerShell 的熟悉程度将对您大有裨益。
  • 您有一个 VMware ESXi 主机或 vCenter 设备用于连接和测试
  • 您正在 Windows(或 Mac/Linux)工作站上工作
  • 您已安装并连接了 PowerCLI。如果没有,请查看此 PowerCLI 安装文章。

我将使用 PowerCLI v 11.4.0。我将在使用 Windows PowerShell 5.1 的 Windows 10 工作站上工作,但欢迎您使用 PowerShell 6,因为本教程具有相同的功能。

使用 PowerCLI 收集有关 ESXi 主机的信息

在深入了解 vSphere 环境的虚拟层之前,最好先回顾一下物理硬件层。 VMware PowerCLI 直接为此目的提供了一个 cmdlet,用于收集名为 Get-VMHost 的详细信息。

连接到 vCenter 服务器或 ESXi 主机后,运行以下 cmdlet。

PS51> Get-VMHost

[玩转系统] PowerCLI 教程:VMware 新手管理指南

由于我连接到管理两个独立 ESXi 主机的 vCenter Server Appliance,因此我获得了有关所管理主机的一些基本信息。 Get-VMHost 允许您查看虚拟化主机的硬件功能。但是,默认情况下,Get-VMHost 不会返回它可以返回的所有信息。

如果将 Get-VMHost cmdlet 通过管道传输到 Format-List,您将获得有关给定主机的所有信息的控制台输出。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

或者,您可以更加挑剔,只选择您正在使用的 VMHost 对象上的单个属性,例如:

PS51> Get-VMHost | format-list -Property State,LicenseKey,Version

利用这种更详细的输出将提供运行虚拟化工作负载的底层硬件的更全面的视图。其中一些信息尤其是:

  • 许可证验证信息
  • CPU/内存总计
  • 硬件供应商模型
  • DNS 主机名

经过审核后,可以使用 Export-CSV cmdlet 将其编译为 CSV 文件。

使用 PowerCLI 检查虚拟机

现在让我们通过查看虚拟主机来深入探讨本 PowerCLI 教程中的另一个主题,即查看给定 ESXi 主机上当前存在哪些虚拟机。

Get-VM 命令是一个方便的命令,可用于查看 VM 信息。

PS51> Get-VMHost -Name <Host FQDN> | Get-VM

此 cmdlet 的输出如下所示:

[玩转系统] PowerCLI 教程:VMware 新手管理指南

上面的输出提供了给定主机上当前运行的虚拟机的完整状态列表。如果您选择不指定单个主机(正如我上面所做的那样),您将收到每个后续主机及其虚拟机的信息表。

如果您在排查问题时需要了解给定主机上的虚拟机数量,或者需要使用 VMware PowerCLI 收集 ESXi 主机信息,则可以继续使用这些 cmdlet。您触手可及的报告功能开始扩展!

使用 PowerCLI 检查虚拟交换机

对于我们这些负责配置或管理 vCenter 集群虚拟网络的人来说,有适合任何用例的全系列网络 cmdlet。如果您希望查看 vSphere 环境中配置的虚拟交换机,您将使用以下命令:

PS51> Get-VirtualSwitch

根据您拥有的虚拟网络和虚拟交换机的数量,您得到的列表可能会相当大。就我而言,如下所示,我有一个DSwitch,它是分布式虚拟交换机

在集群中有许多 ESXi 主机的 Enterprise vSphere 实施中,DSwitches 简化了具有相同配置的多个主机之间的虚拟交换机和端口组的部署。这节省了在每台主机上手动创建相同网络配置的体力劳动,并且是扩展集群的好方法!

[玩转系统] PowerCLI 教程:VMware 新手管理指南

使用 PowerCLI 查找连接到虚拟网络的 VM

在尝试缩小问题范围时,您可能想知道哪些虚拟机连接到哪些网络。要弄清楚这一点,您可以使用 Get-VirtualPortGroup 命令。让我们在本 PowerCLI 教程中了解此 cmdlet。

端口组本质上是一个虚拟网络。要显示所有端口组,请运行不带任何参数的 Get-VirtualPortGroup。然后,您应该会看到 vSphere 环境中存在的所有虚拟端口组的列表。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

要查找该端口组(在我的例子中为 DPortGroup)内的所有虚拟机,您可以运行以下脚本。请务必将值 DPortGroup 替换为您的虚拟端口组的名称。

PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}

在此单行代码中,我们将获取此 vCenter 设备中存在的所有虚拟机的列表,然后使用 Where-Object cmdlet 进行过滤,以仅获取网络名称与我们的网络名称相匹配的虚拟机。港口集团.

[玩转系统] PowerCLI 教程:VMware 新手管理指南

通过此输出,您将能够定义为每个网络连接和配置的机器。

当要求在 VMware 中查找和分析哪些虚拟机连接到特定网络时,您现在可以针对此问题提供 PowerCLI 报告解决方案。

使用 PowerCLI 获取 VM 上的操作系统版本信息

VMware 内部的大部分管理工作都是在虚拟机级别完成的。您可能会收到无数的任务请求,例如检索虚拟机上所有硬盘驱动器大小的列表或获取所有服务器的来宾操作系统版本等。

这些任务在规模上是很繁琐的。 PowerCLI 能够通过一些重要的 cmdlet 来简化这些操作,并将其添加到您的工具库中,因此让我们在本 PowerCLI 教程中介绍它们。

您可能在某个时候被问到:“我们的 VMware 集群中有多少台 Ubuntu 服务器? ”。您可能会花费太多时间在 vCenter 中四处寻找答案。 PowerCLI 可以通过查看 vCenter 中的虚拟机对象并对输出应用一些 PowerShell 魔法来简化此过程。

看一下以下汇总虚拟机信息的脚本。此代码片段使用 Get-View 命令,我们稍后会介绍该命令,但现在您应该知道这是检索 VMware 对象属性的高级方法。在本例中,我们正在收集在此方法中最容易检索的嵌套属性。

PS51> Get-VM | 
      Sort-Object -Property Name |
      Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
      Select-Object -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}}

上面的代码通过 PowerCLI Get-VM cmdlet 检索虚拟机列表,使用 PowerShell Sort-Object cmdlet 对所述列表进行排序,然后检索一些对象使用 PowerCLI Get-View cmdlet 的属性。

在我的环境中运行它会产生以下结果。您可以在 vCenter 中看到虚拟机的名称、配置的操作系统(VMware 的虚拟硬件如何设置为解释来宾操作系统)以及代表的实际运行操作系统实际的操作系统。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

当集群中的 VM replicantScriptrunner 已关闭时,您将无法看到它们的Running OS 值。操作系统由 VMware Tools 服务收集。如果不可用,PowerCLI 无法提取操作系统信息。

使用 PowerCLI 创建 CSV 报告

VMware Tools 是适用于 Windows 和 Linux VM 的客户内服务,可为虚拟机管理程序提供附加信息和管理功能。最常见的是,这将提供干净关闭、操作系统信息以及更高分辨率的虚拟机控制台查看功能。

报告和提供此信息的一种便捷方法是将上述脚本通过管道传输到 Export-CSV cmdlet。 Export-Csv 将创建一个 CSV 文件,其信息与您在控制台中看到的信息相同。

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
Select -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}} | Export-CSV C:\report.csv -NoTypeInformation 

运行上述代码后,您应该能够使用 Excel 打开 CSV 文件来查看报告。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

使用 PowerCLI 检查虚拟硬盘

Get-Harddisk 命令是另一个需要了解的有用命令。 Get-HardDisk cmdlet 允许您检查有关附加到虚拟机的虚拟硬盘的信息。

例如,要查询有关附加到 exchange1 虚拟机的虚拟硬盘的信息,您可以运行以下命令:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List

[玩转系统] PowerCLI 教程:VMware 新手管理指南

其中一些信息可能是多余的,例如以 KB 为单位的容量与以 GB 为单位的容量。但了解 StorageFormat(精简/厚置备类型)是有价值的。并知道 VMDK 文件名。

例如,如果您发现一个常见问题,并且所有 VM 硬盘都驻留在同一数据存储卷上,则了解这些信息可能会加快故障排除速度。

使用 PowerCLI 检查虚拟网络适配器

除了查看虚拟机的硬盘信息之外,您可能还需要检查虚拟网络适配器。要检查单个虚拟机的这些属性,您可以使用 Get-NetworkAdpter cmdlet。

PS51> Get-NetworkAdapter -VM myVM

虽然您之前已在此端口中搜索驻留在同一网络中的所有虚拟机,但这次您只想查看连接到特定虚拟机的适配器。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

如果对连接了多个网络适配器的虚拟机进行故障排除,这非常有用。您可以快速、一目了然地确定这些适配器是否连接到正确的网络。

使用 Invoke-VMScript 在虚拟机中运行 PowerShell 脚本

使用 Invoke-VMScript,您还可以直接在 VM 内部运行 PowerShell 代码;无需网络连接。如果您曾经在 Hyper-V 环境中使用过 PowerShell Direct,这将是类似的体验。

Invoke-VMScript cmdlet 无需创建 PowerShell 远程会话或通过网络使用 Invoke-Command cmdlet,而是可以直接向虚拟机发送命令,而无需正常的 WinRM 或 SSH 连接。

例如,您可能希望在名为 exchange1 的虚拟机上执行简单的目录列表。为此,您需要传递 dir C:\ 作为 ScriptText 参数的值,如下所示。

PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"

结果就像您从虚拟机控制台本身运行命令一样。然后,Invoke-VMScript 中继在虚拟机上运行的命令返回的所有输出。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

虽然这是一个基本示例,但您可以将其变得尽可能复杂。此 PowerCLI cmdlet 允许您在 ScriptText 参数内指定批处理、PowerShell 或 Bash 类型。

您也可以变得更高级。下面您可以了解如何使用 Invoke-VMScript 来运行 PowerShell 代码,并为 ScriptText 参数输入使用单独的 $script 变量。这使我们能够创建更多自定义脚本输入以供虚拟机处理。

PS51> $script = 'Get-Disk'

$guestCredential = Get-Credential

Invoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential  -ScriptType Powershell

ScriptText 参数值需要是一个字符串。这就是为什么 $script 变量必须使用单外引号。

您可能还注意到了 GuestCredential 参数的使用。此参数用于对 VM 操作系统进行身份验证。如果您想以不同的帐户运行脚本,则此参数特别有用。

您的脚本的运行结果应该类似于下面的输出。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

该脚本的结果为我们提供了虚拟机的磁盘信息。基于此,您应该知道它是远程虚拟机,因为 VMware Virtual Disk 作为驱动器的友好名称。

使用 Get-View 进阶

您可能已经看到一些基本 cmdlet 返回一个名为 ExtensionData 的属性。您可以通过将许多 PowerCLI cmdlet 通过管道传输到 PowerShell Get-Member cmdlet 来找到此属性。如果您想知道那是什么,现在您有机会找到答案。

此项目的下一步是了解 Get-View cmdlet。 VMware PowerCLI 利用对虚拟机的许多不同查询来提供漂亮且简单的 Get-VM 输出。但幕后有很多内容只能通过使用 Get-View cmdlet 来访问。

您可能会看到很多使用此 cmdlet 的脚本。您应该花一些时间来习惯查看此 cmdlet 的运行情况。为了熟悉一下,请使用 Get-View cmdlet 获取一些虚拟机信息(本例中为 exchange1)。

您可以看到此 cmdlet 的Filter 选项要求使用 PowerShell 哈希表而不是单个字符串值。构建自己独特的脚本时请注意!

PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}

上面命令的结果是许多嵌套的配置信息和方法选项,用于对虚拟机采取操作或获取对象属性。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

如果您使用上面相同的脚本并将输出发送到变量,您可以使用点符号检查这些嵌套选项。您可以在此处查看并检索来宾操作系统的所有附加信息,您可能希望通过 PowerCLI 报告这些信息。

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}
PS51> $VM.Guest

[玩转系统] PowerCLI 教程:VMware 新手管理指南

也许您想选择一个房产。如果是这样,您可以运行以下命令来缩小单个值的范围。

PS51> $VM.Guest.GuestFullName

对于所有类型的 VMware 对象,都有许多 Get-View 选项。请随意探索所有这些选项,并查看 VMware 提供的这篇内容丰富的文章,该文章深入介绍了这个强大的 cmdlet!

VMware Code Capture - 从您的点击中学习

如果您想利用 PowerCLI,但又不想通过键入来构建代码,那么 vCenter 中的代码捕获非常适合您。代码捕获是一种新的开发人员工具,其作用类似于 Active Directory 管理中心。让我们在本 PowerCLI 教程中介绍代码捕获。

该工具记录您在 GUI 中执行的所有操作。然后它会转换所有这些操作并为您提供 PowerCLI 脚本。

默认情况下,代码捕获未打开。要打开它,请打开您的 vCenter 设备并导航至菜单 -> 开发人员中心,如下所示。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

进入“开发人员中心”选项卡后,切换“启用代码捕获”选项。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

当您启用代码捕获时,您将在 vCenter 标题中看到一个红色的记录按钮。启用后,每当您希望记录操作并将其转换为 PowerCLI 输出时,您必须通过点击“记录”按钮来记录 GUI 活动。

[玩转系统] PowerCLI 教程:VMware 新手管理指南

红色录制按钮将出现在 vCenter 的登录用户部分旁边,以便您现在可以随时录制。

要演示代码捕获,请完成新建虚拟机创建向导。

  1. 单击录制按钮开始录制。这将导致红色录制按钮开始闪烁。
  2. 右键单击您的 VMware 主机,然后创建一个新的虚拟机。运行生成的向导,创建具有所有默认值的新虚拟机。
  3. 创建虚拟机后,单击录制按钮并停止录制。

结果输出可能比预期的稍微详细一些。输出甚至包括创建 VM 之前浏览 GUI 的所有操作。但您应该会看到注释中以 CreateVM_Task 开头的部分。这是代码开始创建虚拟机的地方。

以下是 GUI 中通过代码捕获的新建 VM 向导进程的CreateVM_Task输出的一部分:

[玩转系统] PowerCLI 教程:VMware 新手管理指南

此输出可能有点让人不知所措,但它让您直接了解虚拟机可用的配置选项的数量。根据您自己的需求,您现在可以对自己的脚本进行调整并根据您的喜好进行定制。

代码捕获实用程序不仅限于创建虚拟机。它还可以为网络更改、小型虚拟机修改或主机配置更改构建代码。通过能够查看 GUI 操作的 PowerCLI 输出,您可以在以代码形式部署基础设施的过程中走捷径。

PowerCLI 教程摘要

在这篇文章中,您涵盖了很多内容。不错的工作!我希望您已经意识到 PowerCLI 为管理 VMware 基础架构带来的强大功能。

PowerCLI 中有许多适用于各种产品基础的 cmdlet,但我们在这里只介绍了其中的一些。请务必继续关注此博客,以获取有关这个出色工具的更多文章!

进一步阅读

  • 如何下载和安装 PowerCLI [教程]
  • 官方 VMware PowerCLI 文档

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯