有没有办法在不使用System.Management.Automation的情况下捕获powershell脚本执行的输出

时间:2018-01-03 20:23:12

标签: c# asp.net powershell amazon-web-services

以下方法启动powershell脚本并执行它

 private static void LaunchPowershell()
    {
        string exeDir = "H:\\aws-newAPIKey";

        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.CreateNoWindow = false;
        startInfo.UseShellExecute = false;
        startInfo.FileName = @"C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe";
        startInfo.Arguments = exeDir + "\\newApiKey_wh1.ps1";
        startInfo.WorkingDirectory = exeDir;

        Process process = new Process();
        process.StartInfo = startInfo;
        process.Start();
        process.WaitForExit();
    }

这会在命令行中产生以下输出:

CreatedDate     : 1/3/2018 7:20:16 PM
CustomerId      : 
Description     : This is api key for customer
Enabled         : True
Id              : qraj84yl5h
LastUpdatedDate : 1/3/2018 7:20:16 PM
Name            : newAPIKey7
StageKeys       : {}
Value           : 2LBtWluNX1XbgtDG0SPY1IQgnVDkZTwzmgY3kd60

我想要做的是获取在C#中创建的API密钥的值。有没有办法在不使用System.Management.Autmomation库的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

如果要通过执行进程从powershell检索复杂数据,则可以在powershell对象上使用ConvertTo-Json,并parse it in C#

虽然看起来您正在尝试为AWS创建API密钥,但为什么不使用AWS SDK for .NET

答案 1 :(得分:1)

您的PowerShell管道运行 newApiKey_wh1.ps1 脚本,该脚本可能会返回您显示的输出。

在不了解脚本的情况下我不得不猜测,但是您应该能够在脚本返回的输出上使用Select-Object语句来获得您想要的值。

因此,如果脚本执行类似的操作:

return $Key

然后你可以尝试:

return ($Key | Select-Object -ExpandProperty Value)

这将只提取名为的属性的值。