[PowerShell,HyperV] 透過PowerShell Management Library 把玩HyperV

前陣子因為一些緣由,希望透過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] ,可以得到

image

或是利用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啦!

image

 

在安裝時,如果你的OS不是Core的版本時,會冒出這兩個錯誤,可以不用理他! 按Enter 繼續安裝即可。
碰到要登陸機碼時,就按下是! 去安裝吧~~

imageimage

 

之後就會跳出一個已經Import hyperV Module 的 Powershell,就可以開始直接下指令玩哩!!

image

就在自以為成功安裝完,開開心心的關掉這個視窗後,重新又開起PowerShell
*建議都使用系統管理員身分執行。

並且滿懷欣喜的打上Get-VM時,卻發現.......

image

怎麼回事!!!!我相信如果是玩PowerShell很久的人應該都已經習慣,在使用這些前都要import-module,

但...一開始,我還真的被困擾住了……
因此,使用前記得都要先下這個指令去import-module


import-module hyperv

在用Get-Module確認一下! OK!!!

image

*在開發時曾經碰過下面的錯誤訊息,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不了!!!我知道這個解決方式有點鳥就是了.......
  如果有更好與穩定的方法請告訴我! 感謝

image

 

 

基本上到上面為止,基本的環境就是整個架設完成,之後就可以下一些簡單的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吧!!

image


最後有一個超好用的指令XD 叫做


Get-VMBuildScript TestVM

 

 

 

 

 

 

這個指令可以根據你目前已有的VM,幫你產生指令,如果hyperV有些設定會在介面上設定,但是不知怎樣使用指令
翻文件檔又找不到時,就直接利用介面設定上去,然後利用這個指令請他幫你產生吧!!!

image

 

話說基本上HyperV管理員能做到的事情,psHyperV應該幾乎都能做到,(我還有很多沒測到就是了)
但是其中有一個command - Set-VMNICVLAN  我一直無法成功執行(這是使用 VLAN識別碼 的指令)


$VMnicName=Get-VMNIC -VM $newvm 
Set-VMNICVLAN -nic $VMnicName -vlanid 2

 

 

 

知道怎樣可以解決的請告訴!!感謝 ~~

另一個就是不知道有沒有辦法可以remote方式架設Cluster (發送指令端不在Cluster裡面) @@~?


 image

 

最後附上幾個參考連結

http://pshyperv.codeplex.com/

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/  *建議要看

 


歡迎大家一起到MSDN學習與討論