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