我正在寻求用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需要一段时间才能查询的原因。
要使该系统正常运行,主机和虚拟机需要进行大量的准备工作,由于谷歌比我更好地解释了这些部分,因此我在这里不再赘述。
该流旨在与使用Virtual Box的另一个系统匹配,因此似乎效率低下。显然,需要对此进行修改以适合每种情况,但对于Hyper-V Automation,它应该是一个很好的起点。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句