Передача аргумента в путь к файлу PowerShellScript - PullRequest
1 голос
/ 06 июня 2019

Попытка передать аргумент (ы) или список аргументов в PowerShell Script Path при выполнении его через функцию C #.

Я использую функцию C #, чтобы получить список деталей из моего скрипта через функциюкоторый использует библиотеку System.Management.Automation для вызова команды powershell.Я передаю путь к файлу, поэтому скрипт работает отлично, когда он не требует никаких аргументов, однако, когда мне нужно передать их, он дает исключение User-UnHandled.

Значение в переменной scriptPath:

C:\Users\<username>\source\repos\MyProject\Shell\Get-SDC.ps1 'Test - Group'

Моя функция:

private string PowerShellExecutorStr(string scriptPath)
    {
        string outString = "";
        var shell = PowerShell.Create();
        shell.Commands.AddCommand(scriptPath);
        var results = shell.Invoke();
        if (results.Count > 0)
        {
            var builder = new StringBuilder();
            foreach (var psObj in results)
            {
                builder.Append(psObj.BaseObject.ToString() + "\r\n");
            }
            outString = Server.HtmlEncode(builder.ToString());
        }
        shell.Dispose();
        return outString;
    }

Скрипт:

param($GroupName)
<Get-ADGroup Command to fetch Details of the Group using $GroupName as Parameter>

outString необходимо получить выходные данные скрипта PowerShell при передаче ему аргументов.

Ответы [ 2 ]

1 голос
/ 06 июня 2019

Использовать Добавить параметр

var shell = PowerShell.Create();
shell.Commands.AddCommand(scriptPath)
              .AddParameter("ParamName", "ParamValue");
var results = shell.Invoke();

Вышеизложенное относится к следующему PowerShell:

PS> scriptPath -ParamName ParamValue

Вот разбивка в документации

0 голосов
/ 07 июня 2019

Другой способ, который я нашел по ссылке Арчера, - добавить аргумент

private string PowerShellExecutorStr(string script, string arg)
        {
            string outString = "";
            var shell = PowerShell.Create();
            shell.Commands.AddCommand(script);
            shell.Commands.AddArgument(arg);    // <----- Using this statement
            var results = shell.Invoke();
            ……rest of the code
        }
...