前陣子因為一些緣由,希望透過PowerShell去快速建置一些HyperV的環境,
因此把玩了一陣子的PsHyperV (PowerShell Management Library),在此算是做一些使用上的紀錄吧。
PowerShell Management Library (http://pshyperv.codeplex.com/)是codeplex的一套Open Source,
他把很多HyperV的使用與管理功能包裝起來,然後用簡單的一些語句即可快速建置完成,
例如Get-vm [VmName] ,可以得到........
前陣子因為一些緣由,希望透過PowerShell去快速建置一些HyperV的環境,
因此把玩了一陣子的PsHyperV (PowerShell Management Library),在此算是做一些使用上的紀錄吧。
PowerShell Management Library (http://pshyperv.codeplex.com/)是codeplex的一套Open Source,
他把很多HyperV的使用與管理功能包裝起來,然後用簡單的一些語句即可快速建置完成,
例如Get-vm [VmName] ,可以得到
或是利用Add-vm [VmName],可以快速建置一台空蕩蕩的VM,再用簡單的指令即可做各式各樣的設定。
接下來做個基本的安裝介紹和我自己碰到的注意事項好了:
一開始當然就是先從Codeplex把抓下來,解壓縮後會看到幾個資料夾,
[文件和Library下載位置- http://pshyperv.codeplex.com/releases ]
*建議解壓縮後,資料夾位置不要內含中文,以免做Library安裝時會發生問題。
-
HyperV資料夾,裡面主要就是整個Library Source Code。
*利用筆記本把HyperV.psd1打開,注意一下裡面寫的「En-us.ps1」和實際檔案「En-us.ps1」大小寫是否相同,
我在使用時,HyperV.psd1裡面是en-us.ps1,檔名是En-us.ps1,記得有問過人,PowerShell不怎麼管大小寫,
由於En-us.ps1裡面算是存放了很多共用性參數,但是真正在使用時,卻常常沒有正確的讀取到,導致這些參數變成null而發生錯誤。
後來檔名大小寫都改成一樣後,在重新的安裝,就比較沒這樣的問題,說真的我還是沒搞清楚為何會這樣 = =|
但有朋友實測過,他就完全沒發生這樣的問題...... - PS_Console.REG,就是機碼上的設定,之後在安裝時,就同意就好!
- install.cmd,就是等等安裝的Cmd檔,可以用筆記本打開看看觀察一下。
大致了解後,就是利用系統管理員身分執行install.cmd,Install Library啦!
在安裝時,如果你的OS不是Core的版本時,會冒出這兩個錯誤,可以不用理他! 按Enter 繼續安裝即可。
碰到要登陸機碼時,就按下是! 去安裝吧~~
之後就會跳出一個已經Import hyperV Module 的 Powershell,就可以開始直接下指令玩哩!!
就在自以為成功安裝完,開開心心的關掉這個視窗後,重新又開起PowerShell
*建議都使用系統管理員身分執行。
並且滿懷欣喜的打上Get-VM時,卻發現.......
怎麼回事!!!!我相信如果是玩PowerShell很久的人應該都已經習慣,在使用這些前都要import-module,
但...一開始,我還真的被困擾住了……
因此,使用前記得都要先下這個指令去import-module
import-module hyperv
在用Get-Module確認一下! OK!!!
*在開發時曾經碰過下面的錯誤訊息,Debug時,發現在-namespace $HyperNamespace,$HyperNamespace是空值; 這代表著當初未正確的從「En-us.ps1」將相關的參數建立起來。
有一陣子怎樣搞都解決不了,包括安裝前把「en-us.ps1」改成「En-us.ps1」,
後來直接用
Import-Module 'C:\Program Files\modules\HyperV\En-us.ps1'
解決了這個問題.......
('C:\Program Files\modules\HyperV是安裝後的預設位置,可以在install.cmd看到)
也曾經碰過有電腦我怎麼下「import-Module hyperv」都失敗...
卻下了
Import-Module 'C:\Program Files\modules\HyperV\HyperV.psd1'
順利import hyperv module,一整個我就很莫名其妙,所以在寫script時,變成我會在一開始直接下...
Import-Module hyperv
Import-Module 'C:\Program Files\modules\HyperV\HyperV.psd1'
Import-Module 'C:\Program Files\modules\HyperV\En-us.ps1'
我就不信這樣還import不了!!!我知道這個解決方式有點鳥就是了.......
如果有更好與穩定的方法請告訴我! 感謝
基本上到上面為止,基本的環境就是整個架設完成,之後就可以下一些簡單的command去把玩HyperV,
在psHperV裡他的指令還算容易理解,
Get-XXX,Set-XXX,New-XXX,然後XXX裡就是替換成一些容易理解的名詞,
*這部分可以參閱網站上提供的pdf參考
例如
- Get-Vm / Set-VM / Add-VM -取得、設定、新增一台VM
- Get-VMCPUCount / Set-VMCPUCount -取得、設定CPU的數量 (沒有新增Cpu數量這種選項啦!!!)
- Get-VMMemory / Set-VMMemory -取得、設定VM的記憶體(記憶體當然也沒有再用新增的啦,但可以利用 -dynamic 去設定成動態記憶體)
- Get-VMNIC / Add-VMNIC -取得、新增VM的網路卡 ....等。
在command之後,也有許多常用的參數指令
例如
- -name 就是 VM名稱 (可省略)
-
server 就是host名稱,因此就可以遠端的把玩HyperV啦,但是要注意身分就是了,最簡單的就是利用Domaiin Admins去登入電腦後,
在下這些script或是按住Shift+滑鼠右鍵開啟程式,可以「以不同使用者身分執行」
然後還有其他的參數就是依照各樣的類型去使用了,例如 Set-Memory -VM 就會有 -Memory –Limit、Set-VMCPUCount 就會有 -CPUCount,
基本上不論是命令或是參數,都還算是易懂的。
接下來就做個簡單的Simple Code來產生一個VM吧!!
最後有一個超好用的指令XD 叫做
Get-VMBuildScript TestVM
這個指令可以根據你目前已有的VM,幫你產生指令,如果hyperV有些設定會在介面上設定,但是不知怎樣使用指令
翻文件檔又找不到時,就直接利用介面設定上去,然後利用這個指令請他幫你產生吧!!!
話說基本上HyperV管理員能做到的事情,psHyperV應該幾乎都能做到,(我還有很多沒測到就是了)
但是其中有一個command - Set-VMNICVLAN 我一直無法成功執行(這是使用 VLAN識別碼 的指令)
$VMnicName=Get-VMNIC -VM $newvm
Set-VMNICVLAN -nic $VMnicName -vlanid 2
知道怎樣可以解決的請告訴!!感謝 ~~
另一個就是不知道有沒有辦法可以remote方式架設Cluster (發送指令端不在Cluster裡面) @@~?
最後附上幾個參考連結
http://pshyperv.codeplex.com/releases
http://technet.microsoft.com/en-us/edge/Video/ff955836 *建議要看
http://elegantcode.com/2009/03/25/powershell-management-library-for-hyper-v/ *建議要看