昨天快下班收到一个噩耗,SCVMM2012 SP1中的300多虚拟机的”云”属性没了……具体表现就是在各个已经存在的云中,看不到一台虚拟机,具体表现就是,查看虚拟机的时候,云这块是空的。
出现这种问题到底有多坑爹呢?那就是最终的租户无法啊在SCAC以及SCVMM的控制台的云中看到任何虚拟机,而虚拟机实际上是存在的。
所以现在的做法是要想办法恢复这些属性。
第一个操作,你需要导入VMM的模块
Import-Module virtualmachinemanager
首先拉个表,看看当前的用户组吧
Get-SCUserRole -VMMServer sc-vmmsp1 |select name
再看看有哪些云
Get-SCCloud -VMMServer sc-vmmsp1 |select name
好了,基本得到这两个属性,比较运气好的是,虚拟机的云属性虽然没了,但是虚拟机的用户属性还是存在的,所以可以用PowerShell慢慢倒回去,原则就是这个虚拟机属于这个用户,那就放到这个用户的云中。
我们用两条命令解决
$Cloud = Get-SCCloud -VMMServer sc-vmmsp1 | where {$_.Name -like "这里写云的名字"} get-vm| where {$_.UserRole -like "这里写用户组的名字"}|Set-SCVirtualMachine -cloud $cloud|select name
因为这是用管道来实现的,所以速度不会很快……当然怎么都不人工做这个事情好很多。
这里其实也用到了一些筛选的方法,比如用到了and方法,类似下面这样
#方法是这样的(1 -eq 1) -or (1 -eq 2) #那么具体是怎么写的呢?看下面的一个范例 get-vm|?{$_.userrole -like "管理员"} |?{($_.vmhost -like "hahv1*") -or ($_.vmhost -like "hahv2*") -or ($_.vmhost -like "hahv3*") -or ($_.vmhost -like "hahv4*")}|select name,userrole,vmhost
根据不同的用户组和云,多运行几次脚本,慢慢的就解决了这个问题,但是还有下文啊,以后再出现这个问题咋办?所以我的想法是,备份云、用户组、虚拟机的关系,以后坏了好恢复。【虽然没有具体验证,不过只针对”服务”可能是有些问题的。】
通过get-vm,可以得到虚拟机的具体属性,我列出一些人为比较重要的属性
HostName : 这里是虚拟机所在的物理主机名
VMHost : 这里是虚拟机所在的物理主机名
SelfServiceUserRole : 这里是创建者的组名
CloudId : 8cc833e1-a5e4-45fb-bb0a-bb38aaa41f2a
Cloud : 云名
GrantedToList : {授权访问的用户组}
UserRoleID : 7746c9da-a011-4cdc-9cb2-7b835f42c918
UserRole : 用户组
Owner : 指定的创建者
StartAction : 是不是自动开机
StopAction : 停电之后是关机还是怎么地
CreationSource : 服务的信息
ComputerTier : 服务的信息
这里主要用到了两个命令,一个是Set-SCVirtualMachine 一个是Get-SCVirtualMachine 我们先看一下它支持的参数
-cloud 指定私有云的名称 -ComputerTier 指定计算机层对象 -name 指定虚拟机名称 -service 指定服务名称 #使用方法 Get-SCService ,然后管道传递 -vmhost 指定物理主机 -vmmserver 指定vmm服务器
使用”服务”作为参数的方法稍微特殊一点,如下图所示。
设置这块可以设置的属性很多,我先给一个谷歌版的翻译,可以凑合看看
详细说明
在Set-SCVirtualMachine小命令改变由虚拟机管理器(VMM)管理的虚拟机的一个或多个属性。 您可以更改的属性包括以下内容:
- 与云相关联的虚拟机。
- 名称,所有者和虚拟机的说明。
- BIOS启动顺序(如果部署Hyper-V主机上)。
- 资源的使用的虚拟机的主机上金额。 这些包括:
- 主机的CPU资源,一个虚拟机可以使用的最大数量。
- 由虚拟机使用的预期主机的CPU。
- 主机的CPU资源量在同一台主机上使用一个虚拟相对于其他虚拟机的机器。
- 主机内存量,一个虚拟机可以使用。
- 带宽量主机的网络上的虚拟机可以使用。
- 对无关的资源承载虚拟机的硬件设置。 这些包括:
- CPU的数量。
- 的CPU的类型。
- 磁盘输入/输出操作每秒(IOPS)的数量。
- 限制(对于较旧的操作系统,如Windows NT 4.0)CPU的功能。
- 成本中心,用标准来筛选虚拟机的标签,和自定义设置。
- 设置,使各种可选功能,包括:
- 启用或禁用库对象,以使其可用,或暂时不可用,给用户。
- 启用备份虚拟机的Hyper-V主机卷影复制服务上。
- 启用一键/值对虚拟机及其Hyper-V主机之间的数据交换。
- 从Hyper-V的控制台启用的虚拟机的关机。
- 启用虚拟机的Hyper-V主机之间的时间同步。
- 启用对NumLock键BIOS的价值为Hyper-V主机上的虚拟机。
- 设置标识虚拟机是否具有高可用性,也就是虚拟机部署在Hyper-V主机群集或思杰XenServer主机群集的节点上。
- 设置,确定是否虚拟化来宾服务安装部署Hyper-V主机上的虚拟机上。
- 秒数启动虚拟机之前延迟。
- 环境标识用于一个虚拟机操作系统。
- 启动和停止虚拟机的操作。
- 环境限制虚拟机的自助服务用户可以创建数。
- 设置用于开关,谁属于多个角色自助服务用户用来管理虚拟机的角色。
- 设置的ESX主机到VMware资源池分配上的虚拟机。
如果你想改变一个虚拟软驱,虚拟光驱,虚拟网络适配器,或与特定虚拟机相关联的虚拟SCSI适配器的属性,使用Set-SCVirtualFloppyDrive,设置SCVirtualDVDDrive,设置SCVirtualNetworkAdapter,或Set-SCVirtualScsiAdapter cmdlet的分别。
导出部分,这里导出的属性角度,但是导入部分只写了云,如果说意外情况发生,用户权限部分也丢了,那也是可以修改一下恢复的。
Import-Module virtualmachinemanager $vmmserver = "sc-vmmsp1" $date1 = date $extime = (Get-Date -Format 'yyyyMMddHHmm') $filename = "d:/vmmreport" + $extime + ".txt" $filename2 = "d:/hvcloud" + $extime + ".csv" echo "<#记录用户组"|out-file -Encoding utf8 -Force $filename Get-SCUserRole -VMMServer sc-vmmsp1|select name|out-file -Append -Encoding utf8 -Force $filename echo "#记录云"|out-file -Append -Encoding utf8 -Force $filename Get-SCCloud -VMMServer sc-vmmsp1 |select name|out-file -Append -Encoding utf8 -Force $filename echo "#>"|out-file -Append -Encoding utf8 -Force $filename get-vm -name *|?{$_.HostName -notlike "hv-re-bj*" -and $_.cloud -ne $null}|select name,hostname,cloud,owner,operatingsystem,computernamestring,startaction,stopaction,hostgrouppath,description,cpucount |Export-Csv -Encoding utf8 -Force $filename2
导入部分,需要手动定义一下csv文件
$filenamecsv = "d:/hvcloud201508071645.csv" $vmmserver = "sc-vmmsp1" Import-Csv -Path $filenamecsv | foreach { $cloud2 = $_.cloud $cloud = Get-SCCloud -VMMServer $vmmserver |?{ $_.name -eq $cloud2} $name =$_.name $hostname =$_.hostname $VM = Get-SCVirtualMachine -VMMServer $vmmserver -Name $name| where {$_.VMHost.Name -eq $hostname} set-vm -vm $vm -cloud $cloud |select name,vmhost }
微软云方案高端顶级群【236804566】分享成就牛B之路
欢迎关注新浪微博 @肥九叔