Get-VM PowerShell cmdlet能够帮助管理员获取本地或者远程Hyper-V服务器上的虚拟机配置属性。 Hyper-V管理员能够使用Get-VM PowerShell cmdlet查看并调整一系列虚拟机配置信息。微软花费大量精力对PowerShell进行优化,以提升其对本地或者远程服务器的管理功能。现在大多数服务器角色都已经能够使用PowerShell命令进行管理,而微软在加强现有PowerShell cmdlet的同时,也在不断开发全新的cmdlet,尽量缩短使用GUI完成特定操作的时间。
获取Hyper-V服务器列表 在开始了解Get-VM PowerShell cmdle……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
Get-VM PowerShell cmdlet能够帮助管理员获取本地或者远程Hyper-V服务器上的虚拟机配置属性。
Hyper-V管理员能够使用Get-VM PowerShell cmdlet查看并调整一系列虚拟机配置信息。微软花费大量精力对PowerShell进行优化,以提升其对本地或者远程服务器的管理功能。现在大多数服务器角色都已经能够使用PowerShell命令进行管理,而微软在加强现有PowerShell cmdlet的同时,也在不断开发全新的cmdlet,尽量缩短使用GUI完成特定操作的时间。
获取Hyper-V服务器列表
在开始了解Get-VM PowerShell cmdlet之前,我们需要首先获取已经加入到活动目录域中的Hyper-V服务器列表,之后将结果保存在CSV文件中。可以在安装有活动目录PowerShell模块的电脑中执行下面的脚本,
$ResultFile = "C:TempHyperVServers.CSV"
Remove-item $ResultFile -ErrorAction SilentlyContinue
$STR = "Hyper-V Server, Operating System"
Add-Content $ResultFile $STR
$AllHyperVServers = Get-ADObject -Filter 'ObjectClass -eq
"serviceConnectionPoint" -and Name -eq "Microsoft Hyper-V"'-
ErrorAction SilentlyContinue
foreach($Item in $AllHyperVServers)
{
$Item.DistinguishedName
$DN1, $DN2, $DN3 = $Item.DistinguishedName.Split(",")
$RC1, $RC2 = $DN2.Split("=")
$DN1,$DN2 = $Item.DistinguishedName.split(",")
$ThisItem = Get-ADComputer -Id $RC2 -Properties *
$HyperVServerNow = $ThisItem.Name
$HyperVOSVersionNow = $ThisItem.OperatingSystem
$HyperVServerNow
$HyperVOSVersionNow
$STR = $HyperVServerNow+","+$HyperVOSVersionNow
Add-Content $ResultFile $STR
}
执行上面的脚本之后,目标文件将会列出Hyper-V服务器名称和操作系统版本,如图A所示,
图A. Hyper-V服务器名称以及操作系统版本
需要注意的是许多PowerShell cmdlets只适用于特定版本的Hyper-V操作系统,这就是为什么需要在CSV文件中保存操作系统版本。
Get-VM PowerShell cmdlet
除了显示Hyper-V主机的标准虚拟机配置之外,Get-VM PowerShell cmdlet还能够提供许多其他有用信息。如果在本地Hyper-V主机中执行Get-VM命令,将会显示所有运行在该主机上的虚拟机名称;如果想要获取远程Hyper-V主机上的虚拟机信息,只需要使用-ComputerName参数指定远程Hyper-V服务器名称,如下所示:
Get-VM –ComputerName <RemoteHyper-V Server Name>
ForEach 循环
通过执行上面的命令,管理员能够获得单台远程Hyper-V主机上的虚拟机列表,但是如果想要获取多台Hyper-V主机的虚拟机信息呢?为了从多台远程Hyper-V服务器中获取虚拟机及其配置信息,管理员只需要使用下面的ForEach循环:
$ServerFile = “C:TempHyperVServers.CSV”
$CSV = Import-CSV $ServerFile
ForEach ($Item in $CSV)
{
$HyperVServerName = $Item.’Hyper-V Server’
$HyperVOS = $Item.’Operating System’
< Hyper-V PowerShell Command goes here >
}
如上所示,PowerShell脚本将会加载HyperVServers.CSV文件,其中包含了刚刚获取的Hyper-V服务器列表以及操作系统版本,脚本将HyperVServers.CSV文件赋给变量$CSV,之后每台Hyper-V主机名和操作系统版本都将存储在$HyperVServerName和$HyperVOS两个变量中。因此,如果想要对HyperVServers.CSV文件的每台Hyper-V主机都执行Get-VM命令,脚本应该如下所示:
$ServerFile = “C:TempHyperVServers.CSV”
$CSV = Import-CSV $ServerFile
ForEach ($Item in $CSV)
{
$HyperVServerName = $Item.’Hyper-V Server’
$HyperVOS = $Item.’Operating System’
Get-VM –ComputerName $HyperVServerName
}
如果管理员想获取特定Hyper-V操作系统的虚拟机配置信息,那么可以添加一条IF判断语句在执行Get-VM命令之前检查Hyper-V主机操作系统版本,如下面的斜体字所示:
$ServerFile = “C:TempHyperVServers.CSV”
$CSV = Import-CSV $ServerFile
ForEach ($Item in $CSV)
{
$HyperVServerName = $Item.’Hyper-V Server’
$HyperVOS = $Item.’Operating System’
IF ($HyperVOS –eq “Windows Server 2012”)
{
Get-VM –ComputerName $HyperVServerName
}
}
Get-VM属性
如前面所说,Get-VM PowerShell cmdlet还能够提供许多其他属性,帮助管理员获取特定类型的信息。默认情况下,不带任何参数的Get-VM命令只会显示虚拟机名称、虚拟机状态、CPU使用率、为虚拟机分配的内存以及在线时间等信息。如果管理员想要知道Get-VM命令还能够提供哪些其他信息,可以在本地Hyper-V主机上执行Get-VM | Get-Member命令。如图B所示,使用Get-VM命令还可以获取虚拟机创建时间、是否已经启用动态内存技术、虚拟机网卡等其他信息。
图B. Get-VM能够获取的属性类型
假设管理员想要获取HyperVServers.CSV文件的所有Hyper-V主机上的虚拟机动态内存状态,之后将结果生成一份CSV格式的报告,那么可以使用下面的PowerShell脚本完成这项任务:
$ServerFile = "C:TempHyperVServers.CSV"
$CSV = Import-CSV $ServerFile
$ReportFile = "C:TempHyperVReport.CSV"
$STR = "Hyper-V Server, Command Status, VM Name, Dynamic Memory Status"
Add-Content $ReportFile $STR
ForEach ($Item in $CSV)
{
$HypervServerName = $Item.'Hyper-V Server'
$HyperVOS = $Item.'Operating System'
$ComStatus = "Ok"
$Error.Clear()
$RVM = Get-VM -ComputerName $HypervServerName | select-Object Name, DynamicMemoryEnabled
IF ($Error.Count -eq 0)
{
### START - Command Goes Here ####
ForEach ($ItemVM in $RVM)
{
$VMName = $ItemVM.Name
$DMStatus = $ItemVM.DynamicMemoryEnabled
$STR = $HypervServerName+",OK,"+$VMName+","+$DMStatus
}
### END - Command Goes Here ####
}
else
{
$ErrorNow = $Error[0].Exception.Message
$ComStatus = "Error Executing Command: Error: "+$ErrorNow
$STR = $HypervServerName+","+$ComStatus
Add-Content $ReportFile $STR
}
}
执行上面的脚本之后,将会生成一份如图C所示的报告C:TempHyperVReport.CSV,其中包含所有虚拟机是否已经启用动态内存技术的信息。
图C. Hyper-V服务器的虚拟机动态内存状态信息
如果管理员想要从一台或者多台Hyper-V服务器中获取其他虚拟机配置信息,可以从属性开始选择,之后将其插入到上面的脚本当中。管理员还可以对### START - Command Goes Here ####部分当中的命令进行一些调整。
相关推荐
-
回顾年度9大虚拟化技术
虚拟化管理员从未放弃追寻更好虚拟化技术,以使他们的工作更快、更易于管理以及更好地优化。 我们看到,虚拟化工具在 […]
-
从Azure VM到Hyper-V:想想这些技巧
多年来,IT行业已经推动IT人员把工作负载转到云中。虽然在公有云中有一些好处,但有些工作负载更适合运行云本地数据中心中。
-
支持Linux虚拟机:新版Hyper-V来帮忙
大家都知道,Linux虚拟机无法利用Hyper-V针对Windows虚拟机提供的众多特性。幸运的是,情况已经发生变化,Hyper-V现在能够为Linux提供更多的支持。
-
SCVMM 2016全新特性:如何简化虚拟基础架构管理
微软在SCVMM 2016当中推出了一些全新特性,如零接触部署、添加集群的全新工作流程、不停机升级以及生产检查点(production checkpoint)管理等。