如果您使用System Center Virtual Machine Manager来管理您的hyper - v主机,您可能会发现在个别Hyper-V主机服务器上运行的虚拟机管理器代理有时会过时。控件可以轻松地更新主机的代理虚拟机管理器管理控制台.你要做的就是选择织物工作区,右键单击要更新的Hyper-V主机,然后选择更新代理命令从快捷菜单。你可以在下面的图片中看到它的样子。
PowerShell和Hyper-V:简化管理
尽管这种技术可能很简单,但在有大量托管Hyper-V主机的环境中使用PowerShell可能会更有效。PowerShell不仅简化了批量管理Hyper-V主机的任务,而且还可以编写整个操作的脚本。这意味着您可以设置一个计划作业来自动保持主机代理的更新。
说到这里,我想向您展示如何创建一个PowerShell脚本,该脚本可以更新特定主机组中托管Hyper-V主机上的所有代理。
首先需要的是Virtual Machine Manager中定义的主机组列表。虽然这在技术上不是必需的,但查看主机组名称列表是有帮助的,因为您需要更新Hyper-V主机所在的主机组的确切名称。要查看在VMM中定义的主机组列表,请打开虚拟机管理器命令Shell并输入以下命令:
Get-SCVMHostGroup |选择对象名称
可以使用Get-SCVMHostGroup cmdlet查看已经在VMM中创建的主机组的列表。
一旦知道了要目标的主机组的名称,下一步就是在主机组中创建一个Hyper-V主机列表。这需要您使用三个命令。第一个命令是:
$HostGroup = Get-SCVMHostGroup -Name <主机组名> -VMMServer
该命令获取主机组并将其写入变量$HostGroup中。您需要提供主机组名称和Virtual Machine Manager服务器的完全限定域名。例如,在我的组织中,这个命令看起来像这样:
$HostGroup = Get-SCVMHostGroup -Name Hyper-V -VMMServer vmm.mgmt.com
接下来,您需要设置一个名为主机用于存储主机组中的主机。这可以通过下面这行代码来实现:
$Hosts = Get-SCVMHost -VMHostGroup $主机组
此过程的最后一步是获取主机列表并将其转换为纯文本。该命令提取主机组内主机的名称,并将这些名称写入名为$HostList的变量中。
HostList =美元主机。的名字
下面的图片显示了这些命令的作用。
在创建了主机组中的主机列表之后,可以创建一个简单的ForEach循环来更新每个主机上的代理。在我向您展示如何创建这个循环之前,您可能想知道,当您可以轻松地硬编码主机列表或从CSV文件读取主机列表时,为什么还要费劲地完成所有这些工作。原因是虚拟化环境往往是高度动态的。我使用的方法将始终更新当前驻留在指定主机组中的主机,而不需要手动更新主机列表。
因此,该过程的下一步是创建一个名为$Cred的变量,并将其映射到Get-Credential cmdlet。该变量将提供更新主机上运行的代理所需的权限。
接下来,我们需要创建一个ForEach循环这一步遍历主机列表中的服务器,依次更新每一个服务器。您可能还记得,主机列表包含在一个名为HostList的变量中。因此,我们可以创建一个语句,例如ForEach ($ HostList中的$Server)。在这个循环中,变量$Server将表示当前正在更新的主机。
下一个命令创建一个名为$VMMManagedHost的变量,并将该变量设置为循环当前要更新的服务器。我们使用这行代码($VMMManagedHost = Get-VMManagedComputer -ComputerName $Server)而不是使用原始形式的$Server变量的原因是,我们必须以更新进程能够理解的方式引用主机。更新过程是通过使用update - scvmmmanagedcomputer cmdlet并引用$VMMManagedHost和$Cred变量来执行的。这段代码看起来是这样的:
$VMMManagedHost = Get-VMManagedComputer -ComputerName $Server Update-SCVMManagedComputer -VMManagedComputer $VMMManagedHost -Credential $Cred}
下面是整个脚本的样子:
$HostGroup =Get-Credential $HostGroup = Get-SCVMHost -Name <主机组名> -VMMServer$Hosts = Get-SCVMHost -VMHostGroup $HostGroup $HostList = $Hosts的名字ForEach ($Server in $HostList){ $VMMManagedHost = Get-VMManagedComputer -ComputerName $Server Update-SCVMManagedComputer -VMManagedComputer $VMMManagedHost -Credential $Cred }
您可以在下面的图片中看到脚本的输出。
虚拟机管理器可能会失去连接——但不要担心
关于运行此脚本,您需要知道的最后一件事是,它可能会导致VMM暂时失去与Hyper-V服务器的连接。这意味着,如果您远程连接到正在更新的主机上的虚拟机中运行的VMM,您可能会看到虚拟机会话断开几分钟。但是,这并不意味着主机或虚拟机已经重新启动。这只意味着在更新代理时,Virtual Machine Manager将失去连接。
特色图片:在上面
