簡體   English   中英

來賓上的Windows 8 Hyper-v運行腳本

[英]Windows 8 Hyper-v run script on guest

我正在尋求用MS Hyper-V替換Virtual Box解決方案,因為在使用Virtual Box的自動測試套件中,我遇到了很多不可重現的問題。 我有一台Windows 8.1計算機,將用於在其上運行測試。

當前的虛擬盒子流程:

  1. 啟動虛擬機
  2. 重設快照
  3. 使用C#通過網絡將文件傳輸到Guest OS
  4. 使用Virtual Box觸發傳輸的.exe文件以開始自動測試。

我看到有人使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM