C#调用PowerShell命令取决于以前的命令结果

yptwkmov  于 2023-05-07  发布在  Shell
关注(0)|答案(1)|浏览(186)

我想开发一个PowerShell应用程序,它能够根据前面的命令调用某些命令。此外,下一个命令必须能够从上一个命令中获取结果并对其执行一些操作。因此,我使用微软的PowerShell.SDK。
目前,我有以下方法,命令一个接一个地执行并等待对方。但不要在意结果。

public Task Execute(IJobExecutionContext context)
{
    var details = (IList<(string modulepath,string arguments)>)context.JobDetail.JobDataMap["Commands"];
    
    PowerShell ps = PowerShell.Create();
    foreach (var detail in details)
    {
        ps.Commands.AddCommand("Start-Process").AddParameter("FilePath", detail.modulepath).AddParameter("ArgumentList", detail.arguments).AddParameter("Wait");
    }
    
    ps.Invoke();
    return Task.FromResult(true);
}

有没有什么简单的方法可以从单个命令中获取错误或退出代码?还是我走错路了?谢谢你的任何建议。什么是正确的和最好的方法来做到这一点?

8i9zcol2

8i9zcol21#

如果你按照gunr2171的建议使用本机process.Start方法,那么这可能是一个获取输出的示例方法:

var process = new Process
{
    StartInfo = new ProcessStartInfo()
    {
        FileName = @"C:\windows\system32\windowspowershell\v1.0\powershell.exe" //path to powershell
        Arguments = $"{command_argument_list_here}", //put commands & arguments here
        CreateNoWindow = true,
        RedirectStandardOutput = true,
        UseShellExecute = false  
    }
};

process.start();

// reading the standard output of your command
string outputLine = "";
while (!proccess.StandardOutput.EndOfStream)
{
    outputLine = await proccess.StandardOutput.ReadLineAsync();
    Console.WriteLine(outputLine);
}

string entireOutput = process.StandardOutput.ReadToEnd();

上面的示例中没有完全更新,但提供了如何读取单个命令输出的想法

相关问题