繁体   English   中英

创建PowerShell管道以在C#中读取异步

[英]Creating a PowerShell pipeline to read async in C#

我想在C#中创建等效的:

PS > Get-Disk | Get-Partition

我试过这个:

using (var r = RunspaceFactory.CreateRunspace())
{             
    var pipeline = r.CreatePipeline();

    var gd = new Command("Get-Disk");
    var gv = new Command("Get-Partition");

    pipeline.Commands.Add(gp);
    pipeline.Commands.Add(gv);

    var results = pipeline.Invoke()
}

但这不是同步 我想创建管道并异步读取它。 可能吗?

谢谢!

注意:这是相关的,但不是async: 如何在c#中使用pipe powershell命令

我有一些问题让它识别Get-Disk|Get-Partition命令,所以我dir|select Namedir|select Name 希望在您的环境中,您可以替换Get-Disk|Get-Partition

这是使用System.Management.AutomationPowerShell对象

using (PowerShell powershell = PowerShell.Create()) {
    powershell.AddScript("dir | select Name");

    IAsyncResult async = powershell.BeginInvoke();

    StringBuilder stringBuilder = new StringBuilder();
    foreach (PSObject result in powershell.EndInvoke(async)) {
        stringBuilder.AppendLine(result.ToString());
    }

    Console.WriteLine(stringBuilder);
}

为了示例,我只是调用.BeginInvoke()和使用.EndInvoke(async)来演示此异步部分。 您将需要根据您的需要进行调整(即以不同方式处理结果等),但我过去曾多次使用过这个PowerShell类,并发现它非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM