PowerShell針對SCVMM批量導出模板的描述信息以及導入

SCVMM的模板也會給Windows Azure Pack使用,這個時候如果手頭有很多很多的節點需要導入導出,會是非常麻煩的一個事情,手動改的工作量很大。

比如說下面這張圖,一個vhdx文件包含至少有名稱、系列、版本、操作系統、以及本來路徑的名字,另外如果是給Windows Azure Pack使用,可能還包含一個tag。這些屬性都需要一一輸入,一兩個可能你還願意自己手動修改,但是多了呢?不僅容易出錯,掙錢幹活的速度也大大降低了。解決這個問題同樣使用PowerShell完成,用到的方法不多,依然是博客以前提到的一些方法,進行了整合。

wKiom1W5lkjDWom8AAJLsS41InE445.jpg

首先我需要獲取到原始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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章