2013/10/31

[PowerShell] get-wmiobject invalid class - 模組多次Import 錯誤

最近在研究使用PowerShell 跟Hyper-V 互動
寫了一個 Script(.ps1)去建立&設定VM

Import-Module hyperv

$newvm = "JJ_VM1-3"
$vhdpath="C:\Users\Public\Documents\Hyper-V\Virtual hard disks\jj1-3.vhd"
$cpu=2
$memsize=1024
$memlimit=2048
$vmVirtualSwitch="Test2"


New-VM $newvm

Add-VMDisk -VM $newvm -Path $vhdpath 0 0

Set-VMCPUCount -VM $newvm -CPUCount $cpu 

Set-VMMemory -VM $newvm -Memory $memsize

Add-VMNic -VM $newvm -VirtualSwitch $vmVirtualSwitch

就可以成功的建立VM了

但是要再次執行時就發生了問題....
就會出現下面的錯誤訊息

Get-WmiObject : Invalid class

想說奇怪剛剛不是好好的嗎??
同樣的程式卻不能執行兩次...
重複試了很多次,還是出現相同的錯誤

最後關掉了PowerShell的視窗,重新開一個
執行Script,又成功建立VM了
但是當我要在執行第二次的時候又出現了相同的錯誤...

重複試了幾次只要是開視窗的第一次執行
都可以成功,後面就都會出現錯誤訊息了




仔細看了一下錯誤的訊息,好像是找不到模組
可是我的Script 的第一行不就 Import-Module
如果沒有Import 第一次也不會成功阿....

找很久之後終於找到了答案
原來是模組多次 Import造成這樣的問題....
以為頂多是 On 跟 Off 狀態而已

但是看看錯誤訊息跟上一篇沒有 Import模組的不一樣
一旦重複 Import之後就回不去了....只能重開視窗了

那有什麼方法可以避免重複 Import呢??

if(!(get-module hyperv))
{
   import-module hyperv
}
其實只要改成要Import前,先判斷模組是否已經存在了
如果沒有的話再Import,這樣就沒問題了


參考資料:
http://pshyperv.codeplex.com/discussions/230371

沒有留言:

張貼留言