标签:powershell scvmm
SCVMM的模板也会给Windows Azure Pack使用,这个时候如果手头有很多很多的节点需要导入导出,会是非常麻烦的一个事情,手动改的工作量很大。
比如说下面这张图,一个vhdx文件包含至少有名称、系列、版本、操作系统、以及本来路径的名字,另外如果是给Windows Azure Pack使用,可能还包含一个tag。这些属性都需要一一输入,一两个可能你还愿意自己手动修改,但是多了呢?不仅容易出错,挣钱干活的速度也大大降低了。解决这个问题同样使用PowerShell完成,用到的方法不多,依然是博客以前提到的一些方法,进行了整合。
首先我需要获取到原始vhdx文件的名称,它包含在“路径”属性中,类似下面的形式
\\vm121.contoso.com\MSSCVMMLibrary\M-CentOS64.vhdx
我只需要M-CentOS64.vhdx部分,第一次,我用了一个很傻的方法,下面是伪代码
$GHD = Get-SCVirtualHardDisk #这是一种效率比较低的方法 $2b = $GHD.name $2b $zz = (Get-SCVirtualHardDisk -name $2b).SharePath $zz = $zz -replace "\\", "" #必须填写vhdx文件所在的库服务器名和库共享名 $zz = $zz -replace "vm121.contoso.com", "" $zz = $zz -replace "MSSCVMMLibrary", "" Add-Member -InputObject $tagx -MemberType NoteProperty -Name "vhdxname2" -value $zz -Force #写入变量到vhdxname2这个属性当中 }
那么上面这个方法为什么说比较傻呢?因为它只是用-replace做了替换的方法,这个时候需要替换三次,第一次替换\,第二次替换库名字,第三次替换库共享名,最后剩下的就是文件名了。而且这种替换不是通用的,需要手动把变量写进去。
所以我采用了Split的分割方法,效率和通用性一下提高了
$2b = $tagx.name $zz = (Get-SCVirtualHardDisk -name $2b).SharePath $zz =$zz.Split("\")[-1]
这里的意思是说,用\分割,取最后一组数据。
好,我们来看看完整的取数据的代码
$GHD = Get-SCVirtualHardDisk foreach($tagx in $GHD) {[string]$tagxx =$tagx.tag Add-Member -InputObject $tagx -MemberType NoteProperty -Name "tagx2" -value $tagxx -Force $2b = $tagx.name $zz = (Get-SCVirtualHardDisk -name $2b).SharePath $zz =$zz.Split("\")[-1] Add-Member -InputObject $tagx -MemberType NoteProperty -Name "vhdxname2" -value $zz -Force } $GHD|select Name,FamilyName, OperatingSystem, Release,tagx2,vhdxname2,VirtualizationPlatform| Export-Csv c:/GRlistold.csv -Force -Encoding utf8
取了之后,我们需要在新服务器上导入,拷贝上文的c:/GRlistold.csv,然后我们会用到另外一组代码,需要注意的是,在Windows Azure Pack环境中,tag可能是多个数组,这里我的方法只能输入一个数组,所以如果有需要,针对数组方面,还需要自己添加一下。
Import-Csv -Path c:/GRlistold.csv | foreach { $vhdxname = $_.Name $vhdxname2 = $_.vhdxname2 $OperatingSystem = $_.OperatingSystem $familyName = $_.FamilyName $release = $_.Release $tags = $_.tagx2 $VirtualizationPlatform = $_.VirtualizationPlatform $myVHD = Get-SCVirtualHardDisk -name $vhdxname Set-scvirtualharddisk –virtualharddisk $myVHD –OperatingSystem $OperatingSystem –FamilyName $familyName –Release $release –Tag $tags -name $vhdxname2 -VirtualizationPlatform $VirtualizationPlatform } Get-SCVirtualHardDisk |select name,FamilyName, OperatingSystem, Release,tag,VirtualizationPlatform|ft
本文出自 “九叔-微软私有云” 博客,请务必保留此出处http://jiushu.blog.51cto.com/972756/1680016
PowerShell针对SCVMM批量导出模板的描述信息以及导入
标签:powershell scvmm
原文地址:http://jiushu.blog.51cto.com/972756/1680016