Как добавить аргументы в powershellinstance в C# - PullRequest
1 голос
/ 29 апреля 2020

У меня есть сценарий powershell, мне нужно выполнить его с помощью c#

string psData = System.IO.File.ReadAllText(@"C:\Users\m\Desktop\power.ps1");
        using (PowerShell PowerShellInstance = PowerShell.Create())
        {
            PowerShellInstance.AddScript(psData);

            IAsyncResult result = PowerShellInstance.BeginInvoke();
            while (!result.IsCompleted)
            {
                Logger.Info("Wait initiated");
                Thread.Sleep(5000);
            }
            Logger.Info("Execution completed");
        }

Использование приведенного выше сценария кода выполняется, но как я могу передать аргументы сценарию оболочки

Я изменился код

string psData = System.IO.File.ReadAllText(@"C:\Users\m\Desktop\power.ps1");
        Process pr = new Process();
        var processStartInfo = new ProcessStartInfo()
        {
            FileName = "powershell.exe",
            Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file \""+psData+"\" \"arg1\" \"arg2\"",
            UseShellExecute = false
        };
        pr.StartInfo = processStartInfo;
        pr.Start();
        pr.WaitForExit();

1 Ответ

2 голосов
/ 29 апреля 2020

Использовать метод AddArgument.
Подробнее -> https://docs.microsoft.com/en-us/dotnet/api/system.management.automation.powershell.addargument?view=pscore-6.2.0

-------- Старый ответ --------------- -

Не уверен, как это сделать с помощью класса PowerShellInstance, но вы можете использовать класс Process для вызова сценария PowerShell с аргументом.

var file = @"C:\<Directory>\GetServices.ps1";
var processStartInfo = new ProcessStartInfo()
{
    FileName = "powershell.exe",
    Arguments = $"-NoProfile -ExecutionPolicy unrestricted \"{ps1File}\"",
    UseShellExecute = false
};
Process.Start(startInfo);

Для получения дополнительной информации -> https://duanenewman.net/blog/post/running-powershell-scripts-from-csharp/
Редактировать 2

  string psData = @"C:\Users\manis\Desktop\test.ps1";
    Process pr = new Process();
    var processStartInfo = new ProcessStartInfo()
    {
        FileName = "powershell.exe",
        Arguments = $"-NoProfile -ExecutionPolicy unrestricted -file {psData} hello",
        UseShellExecute = false
    };
    pr.StartInfo = processStartInfo;
    pr.Start();
    pr.WaitForExit();

И мой скрипт Powershell выглядит следующим образом

param ($param1)
write-host $param1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...