[英]Windows 8 Hyper-v run script on guest
我正在尋求用MS Hyper-V替換Virtual Box解決方案,因為在使用Virtual Box的自動測試套件中,我遇到了很多不可重現的問題。 我有一台Windows 8.1計算機,將用於在其上運行測試。
我看到有人使用Powershell腳本和WMI啟動和停止他們的Hyper-V VM,但是我看不到任何在Guest OS上觸發已傳輸文件的方法。
我是否缺少可以使用的API? 否則,我如何以編程方式觸發來賓OS上的EXE?
我最終使用了System.Management.Automation.PowerShell
。 我將分享我用於執行每個步驟的主要代碼塊,以便將來的用戶獲得幫助。
var ps = PowerShell.Create();
//Restore Snapshots
ps.AddCommand("Restore-VMSnapshot");
ps.AddParameter("Name", snapshot);
ps.AddParameter("VMName", vmName);
ps.AddParameter("Confirm", false);
ps.Invoke();
ps.Commands.Clear();
//Start VM
ps.AddCommand("Start-VM");
ps.AddParameter("Name", vmName);
ps.Invoke();
ps.Commands.Clear();
//Get IP
string[] ipValues = null;
do
{
ps.AddCommand("Get-VMNetworkAdapter");
ps.AddParameter("VMName", vmName);
var ips = ps.Invoke();
ps.Commands.Clear();
if (ips.Count > 0)
{
ipValues = (string[])ips[0].Members["IPAddresses"].Value;
}
} while (ipValues.Length ==0);
string ip = ipValues[0];
//Move Exe to VM
File.Copy(@"...", "\\\\" + ip + "\\Users\\Public\\Documents\\...", true);
//Run Program
ps.AddScript("$Username = '...'; $Password = '...' ;$ComputerName = '"+ip+"' ;"+
"$Script = {Start-Process C:\\Users\\Public\\Documents\\....exe} ;$secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force ;"+
"$mycreds = New-Object System.Management.Automation.PSCredential ($Username, $secpasswd) ;"+
" $Session = New-PSSession -ComputerName $ComputerName -credential $mycreds ; Invoke-Command -Session $Session -Scriptblock $Script");
var passwords = ps.Invoke();
ps.Commands.Clear();
//GetIP
部分是一個do{}while()
導致IP需要一段時間才能查詢。
要使該系統正常運行,主機和VM需要進行大量的准備工作,由於google比我更好地介紹了這些部分,因此我在這里不做介紹。
該流程旨在與使用Virtual Box的另一個系統匹配,因此似乎效率低下。 顯然,需要對此進行修改以適合每種情況,但是對於Hyper-V Automation,它應該是一個很好的起點。
將文件傳輸到VM的一個非常有用的PowerShell CmdLet是Copy-VMFile。
語法在這里說明:
http://technet.microsoft.com/en-us/library/dn464282.aspx
希望這可以幫助 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.