所以我想创建一种异步运行powershell脚本的方法。下面的代码是我目前所拥有的,但它似乎不是异步的,因为它锁定了应用程序,输出不正确。
public static string RunScript(string scriptText)
{
PowerShell ps = PowerShell.Create().AddScript(scriptText);
// Create an IAsyncResult object and call the
// BeginInvoke method to start running the
// pipeline asynchronously.
IAsyncResult async = ps.BeginInvoke();
// Using the PowerShell.EndInvoke method, get the
// results from the IAsyncResult object.
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject result in ps.EndInvoke(async))
{
stringBuilder.AppendLine(result.Methods.ToString());
} // End foreach.
return stringBuilder.ToString();
}
2条答案
按热度按时间w1jd8yoj1#
您正在异步调用它。
但是,通过调用
EndInvoke()
同步地等待异步操作完成,这就违背了目的。要真正异步运行它,您需要使您的方法也异步。
您可以通过调用
Task.Factory.FromAsync(...)
来获取异步操作的Task<PSObject>
,然后使用await
。y4ekin9u2#
当这篇文章发表的时候,这可能还没有,但是考虑到它是一个顶级的谷歌搜索结果,知道现在有一个InvokeAsync命令可能会有所帮助。