[英]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 Name
了dir|select Name
。 希望在您的环境中,您可以替换Get-Disk|Get-Partition
。
这是使用System.Management.Automation
的PowerShell
对象
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.