나는 현재 사용자가Powershell 진행 상황과 C#의 오류를 어떻게 추적합니까?
하여 .vmdk (VM웨어 VM 파일)을
.vhdx에
(하이퍼 V VM 변환 할 수있는 WPF 응용 프로그램을 쓰고 있어요 파일).
나는 cmdlet을
Microsoft 가상 머신 변환기 3.0.0
I와 함께 제공되는 MvmcCmdlet.psd1 모듈에있는 (를 ConvertTo-MvmcVirtualHardDisk)를 사용하고 있습니다 하드 코드 된 atm을 사용하여 기능을 테스트하고 있습니다. 모듈을 가져올 및 런타임시 사용할 수있는, 내가 인 새로운 스레드에서 파워 쉘 코드를하고 있어요
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Threading;
using System.Windows;
namespace PowershellTestArea
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private string output { get; set; }
public MainWindow()
{
InitializeComponent();
}
private void Button_OnClick(object sender, RoutedEventArgs e)
{
new Thread(() =>
{
Runspace rs = RunspaceFactory.CreateRunspace();
rs.ThreadOptions = PSThreadOptions.UseCurrentThread;
rs.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = rs;
ps.AddCommand("Import-Module", true).AddParameter("Name", @"C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1");
ps.Invoke();
Debug.WriteLine(ps.HadErrors);
Thread.Sleep(3000);
ps.AddCommand("ConvertTo-MvmcVirtualHardDisk")
.AddParameter("–SourceLiteralPath", @"'C:\VM\Windows 7 x64.vmdk'")
.AddParameter("-VhdFormat", "Vhdx");
Debug.WriteLine(ps.HadErrors);
ps.BeginInvoke();
IAsyncResult asyncResult = ps.BeginInvoke<PSObject, PSObject>(null, output);
while (!asyncResult.IsCompleted)
{
Debug.WriteLine("Running...");
}
Debug.WriteLine(ps.Streams.Error.ToString());
rs.Close();
}).Start();
}
}
}
이유 :
여기에 내 현재 코드입니다. 저는 그것이 동일한 세션에서 가져 오기 때문에 말하도록하고 싶습니다. 과정 :
ps.AddCommand("ConvertTo-MvmcVirtualHardDisk")
.AddParameter("–SourceLiteralPath", @"'C:\VM\Windows 7 x64.vmdk'")
.AddParameter("-VhdFormat", "Vhdx");
Debug.WriteLine(ps.HadErrors);
ps.BeginInvoke();
마감 정말 빨리 (HadErrors는 false를 반환)하고 PowerShell에서 실행하면 완료하는 데 약 40 분 정도 소요됩니다.
아무에게도 진행 상황을 추적하기 위해 수행 할 작업을 알 수 없으므로 변환을 완료 할 수 있습니까?
편집 :this question에서
차이 내 프로세스가 제대로 완료되지 않는다는 것입니다, 나는 과정을 완료 할 수있는 시간을 제공하십시오 방법에 대해 궁금하네요.
문제 해결을 위해 모든 것을 신속하게 캡처 할 수 & 더러운 방법입니다. 'ConvertTo-MvmcVirtualHardDisk'는 진행 바를 표시합니까? 그렇다면 진행 스트림을 첨부하여 읽을 수 있습니다. –
답변 해 주셔서 감사합니다. Powershell에서 실행할 때 진행 막대를 표시합니다. 이것을 달성하는 방법에 대해 안내 할 수 있습니까? – Kristian
[이 질문] (http://stackoverflow.com/questions/34814719/reading-powershell-progress-bar-output-in-c-sharp)을 확인하십시오. 프로퍼티 스트림에서 이벤트를 수신하는 법을 보여줍니다. –