微软Hyper-V虚拟化技术到了R2版本已经可以在企业里玩玩了。配合SCVMM,管理虚拟机也变得轻松起来。不过,我可不想只依赖一种方式,就也看了一下PowerShell在这方面的表现。也很强大。
以下的示例是个很常用的功能:我知道虚拟机的名称,想找一下它当前跑在哪台物理机上。
环境介绍:一组16节点群集的Hyper-V(R2)虚拟机池,命名规则为Host01,Host02 ... Host16。
准备工作:让Hyper-V具备PowerShell支持 http://pshyperv.codeplex.com/
安装过程中可能会报错,不知道你是不是会介意,反正我是淡定的无视了。
思路:我还没找到直接的命令可以完成搜索的功能,所以决定傻做,从每台服务器上检索,反正物理服务器是有规律的。用到的命令是:
get-vm -server 物理服务器名
从获取的所有虚拟机里再过滤出符合条件的。
以下是PowerShell代码(假设我要找一台叫v-db-ssd的虚拟服务器):
$vpc = "v-db-ssd" # The virtual server to be searched
$vms = for ($i=1;$i -lt 17 ;$i++){$tmp = "0$i";$serverID = $tmp.SubString($tmp.Length-2,2);get-vm -server "Host$serverID"}
$vms|where {$_.VMElementName -eq $vpc}
运行时,必须导入PSHyperV的模块,具体就是:start %windir%\System32\WindowsPowerShell\v1.0\powershell.exe -noExit -Command "Import-Module '%ProgramFiles%\modules\hyperV' "(其实这句话就是抄来的,在它安装文件的最后一行。)