Вызванная команда PS для строки - PullRequest
1 голос
/ 14 июля 2020

Есть ли способ преобразовать вызванную команду powershell из C# в строку?.

Скажем, например, у меня есть что-то вроде этого:

PowerShell ps = PowerShell.Create();
                    ps.AddCommand("Add-VpnConnection");
                    ps.AddParameter("Name", "VPN_" + ClientName);
                    ps.AddParameter("ServerAddress", VPN_SERVER_IP);
                    ps.AddParameter("AllUserConnection");
                    ps.AddParameter("SplitTunneling", true);
                    ps.AddParameter("TunnelType", "L2tp");

И я хотел бы сохранить вызванная команда в файл журнала.

Могу ли я каким-то образом вернуть всю команду в виде строки?

Ответы [ 2 ]

1 голос
/ 14 июля 2020
• 1000
0 голосов
/ 14 июля 2020

Примечание. Этот ответ не решает проблему OP. Вместо этого он показывает, как записать вывод команды PowerShell как строку в C#, отформатированную таким же образом, как вывод команды будет печататься на display (console ) , если он был запущен в интерактивном сеансе PowerShell.

Out-String - это командлет, который создает отформатированные, для отображения представления объектов вывода в виде строк , как они будут выводиться на экран в консоли PowerShell.

Следовательно, вам просто нужно использовать другой .AddCommand(), чтобы перенаправить вывод вашего Add-VpnConnection вызова на Out-String:

string formattedOutput;
using (PowerShell ps = PowerShell.Create())
{

  ps.AddCommand("Add-VpnConnection")
    .AddParameter("Name", "VPN_" + ClientName)
    .AddParameter("ServerAddress")
    .AddParameter("AllUserConnection", VPN_SERVER_IP)
    .AddParameter("SplitTunneling", true)
    .AddParameter("TunnelType", "L2tp");

  // Add an Out-String call to which the previous command's output is piped to.
  // Use a -Width argument (column count) large enough to show all data.
  ps.AddCommand("Out-String").AddParameter("Width", 512);

  // Due to use of Out-String, a *single string* is effectively returned,
  // as the only element of the output collection.
  formattedOutput = ps.Invoke<string>()[0];

}

Console.Write(formattedOutput);
...