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

[玩转系统] 最适合管理员的 PowerCLI 命令(第 1 部分)

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

最适合管理员的 PowerCLI 命令(第 1 部分)


[玩转系统] 最适合管理员的 PowerCLI 命令(第 1 部分)

探索日常管理生活中最常用的 PowerCLI 命令 - 在本系列的第 1 部分中,您将详细了解 VMware 中的元数据以及标签和自定义属性的使用。

VMware很早就认识到PowerShell的潜力,这也是该技术公司的PowerShell模块(PowerCLI)非常成熟的原因。该模块具有 800 多个 cmdlet,可实现 VMware 产品 ESX、vCenter 甚至 vSphere 的几乎完全自动化。本系列文章深入介绍了各种 cmdlet,在我看来,这些 cmdlet 在 VMware 环境的管理中发挥着重要作用,并且可以使日常管理工作变得更加轻松。

该系列由以下文章组成:

  • 简介和虚拟机库存管理(第 1 部分)
  • 创建快照和 VMware 模板(第 2 部分)
  • 常规 VMware 导航和高级信息(第 3 部分)

VMware 为其产品提供了大量属性,并将这些属性分配给每个虚拟机。在某种程度上,使用这些属性也是有意义的——但公司特定的属性并未包含在标准集中。不过,为此目的,VMware 提供了使用标签或自定义属性的选项。这些可用于管理虚拟机的各种元数据。在本文中,您将了解为什么在 VMware 中使用此类元数据有意义,以及如何通过 PowerShell 和 PowerCLI 使用标签和自定义属性,从而大幅降低手动管理任务及其错误率。

标签管理

说明标签使用的一种方法是将虚拟机标记为生产、测试或开发系统。通常,此信息通过虚拟机的命名方案进行映射。虽然这在许多情况下都有效,但不能保证命名方案将来不会改变,这可能会导致不一致——在你我之间,没有人真的想对不一致的虚拟机名称进行正则表达式杂技,他们是吗? ?

相比之下,元数据(例如标签)的主动管理提供了一种更有效的方法。当虚拟机创建时,可以直接为其分配合适的类型。除此之外,这消除了繁琐的搜索有关名称的信息的需要。

标签和相关规范可用于灵活设计自动化流程。例如,一种可能的用例是 VMware 工具在夜间自动更新测试计算机,在此过程中重新启动系统,而在执行重新启动之前手动检查生产系统。

然而,标签不仅为系统类型维护提供了机会,而且还为许多其他应用领域提供了机会。 PowerShell 可用于通过创建和分配标签,然后按标签进行过滤来简化标签的管理。

可以使用以下代码将前面描述的示例付诸实践:

# Creates a new tag category
New-TagCategory -Name "SystemType" -EntityType VirtualMachine

# Creates a new tag in the previously created tag category  
$TagSystemType = Get-TagCategory -Name "SystemType" | 
New-Tag -Name "Production"

# Adds the tag to the VM object
$vmTagAssignmentParams = @{ 
	Tag = $TagSystemType 
    Confirm = $false 
} 
Get-VM | 
	Where-Object {$_.Name -match "servername"} |
	New-TagAssignment @vmTagAssignmentParams

# Find all VMs with the tag "Production" 
Get-VM |
	Get-TagAssignment |
	Where-Object {$_.Tag -like 'Production'}

因此,首先应创建一个标签类别(如果尚不存在),然后应在该类别下创建相应的标签。当然可以随时创建该类别的更多标签。然后,可以将标签分配给虚拟机。最后一行显示了如何显示分配了特定标签的所有虚拟机。之后,可以根据用例进一步处理输出列表。

自定义属性

与标签不同,自定义属性基于键值模式。对于标签,可以通过类别进行分配(例如:系统类型 - 生产),但这应该经过深思熟虑。在此示例中,我们预计“系统类型”类别中的标签数量不会显着增加。

可能会添加“staging”标签,但从技术角度来看,其他标签没有多大意义。然而,如果“标签”或属性不代表有限的集合,情况就不同了。以下场景:

在公司中,当请求虚拟机时,会指定预期的删除日期(您肯定知道许可证、服务器或应用程序很乐意被请求,但是如果没有,请求者在再次删除相应资产时不会有一半的精力)需要更长的时间)。根据该删除日期,可以在删除日期之前不久通知功能主管,以便可以推迟删除期限或者可以释放虚拟机进行删除。

在此示例中,很明显,如果指定相应的删除日期,标签的数量将是天文数字。这里更好的选择是使用“自定义属性”。这些直接分配给虚拟机,不属于某个类别。自定义属性由键/标识符和值组成。在我们的示例中,标识符始终为“DeletionDate”或“DateOfRemoval”——该值由日期组成。这会产生以下 PowerShell 代码:

# Load VM Object 
$VM = Get-VM "servername"

# Set date to "today in 3 years" and save as string 
$DeletionDate = ((Get-Date).AddDays(365 * 3)).ToString("dd.MM.yyyy")

# Create new custom attribute
New-CustomAttribute -TargetType "VirtualMachine" -Name "DateOfRemoval"

# Add deletion period as value to custom attribute and assign it to VM
$annotationParams = @{ 
	CustomAttribute = "DateOfRemoval" 
	Value = $DeletionDate 
} 
$VM | Set-Annotation @annotationParams


# Get custom attributes of a VM 
(Get-VM "servername").CustomFields

因此,首先将日期以请求的格式存储为字符串。然后创建一个新的自定义属性。在下一步中,这将与之前指定的日期一起分配给具体的虚拟机。现在可以通过“CustomFields”属性返回虚拟机的自定义属性。有关特定标签的查询可使用以下查询:

Get-VM | Get-Annotation -CustomAttribute "DateOfRemoval"

您可以使用Where-Filter限制输出:

$Date = (Get-Date).ToString("dd.MM.yyyy") 
$filteredAnnotations = Get-VM | 
	Get-Annotation -CustomAttribute "DateOfRemoval" |
    Where-Object { $_.Value -eq $Date }

结论

正如您所看到的,所有信息都可以在 VMware 环境中使用标签或自定义属性进行维护。请务必注意正确使用 - PowerShell 提供了管理标签和自定义属性所需的工具。

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

取消回复欢迎 发表评论:

关灯