如何创建C#的异步powershell方法?

41zrol4v  于 2023-03-30  发布在  Shell
关注(0)|答案(2)|浏览(151)

所以我想创建一种异步运行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();
    }
w1jd8yoj

w1jd8yoj1#

您正在异步调用它。
但是,通过调用EndInvoke()同步地等待异步操作完成,这就违背了目的。
要真正异步运行它,您需要使您的方法也异步。
您可以通过调用Task.Factory.FromAsync(...)来获取异步操作的Task<PSObject>,然后使用await

y4ekin9u

y4ekin9u2#

当这篇文章发表的时候,这可能还没有,但是考虑到它是一个顶级的谷歌搜索结果,知道现在有一个InvokeAsync命令可能会有所帮助。

PSDataCollection<PSObject> connectionResult = await ps1.InvokeAsync();

相关问题