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

问题描述 投票:1回答:2

下面的方法启动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库的情况下执行此操作?

c# asp.net powershell amazon-web-services
2个回答
1
投票

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

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


1
投票

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

在不知道更多关于脚本的情况下我将不得不猜测,但您应该能够在脚本返回的输出上使用Select-Object语句,只需要您想要的值。

所以,如果脚本执行类似的操作:

return $Key

然后你可以尝试:

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

这将只取出名为Value的属性的值。

© www.soinside.com 2019 - 2024. All rights reserved.