Вы определяете $stepx
как переменную , которая не совпадает с передачей значения в параметр $stepx
вашего скрипта .
Переменная существует независимо от параметра, и поскольку вы не передаете аргумент в свой сценарий, его параметр привязан к значению по умолчанию.
Следовательно, вам нужно передать аргумент (значение параметра) параметру вашего скрипта:
Несколько странно, что скрипт file вызывается через экземпляр Command
, которому вы передаете аргументы (значения параметров) через его коллекцию .Parameters
.
В отличие от этого, .AddScript()
используется для добавления строки в качестве содержимого сценария в памяти (хранящегося в строке), то есть фрагмента исходного кода PowerShell .
Вы можете использовать либо метод для вызова сценария файл с параметрами, хотя если вы хотите использовать строго типизированные аргументы (значения которых не могут быть однозначно выведены из их строковых представлений), используйте подход на основе Command
(альтернатива .AddScript()
упоминается в комментариях):
using (Runspace space = RunspaceFactory.CreateRunspace())
{
space.Open();
Pipeline pipeline = space.CreatePipeline();
// Create a Command instance that runs the script and
// attach a parameter (value) to it.
// Note that since "test.ps1" is referenced without a path, it must
// be located in a dir. listed in $env:PATH
var cmd = new Command("test.ps1");
cmd.Parameters.Add("stepx", "This is a test");
// Add the command to the pipeline.
pipeline.Commands.Add(cmd);
// Note: Alternatively, you could have constructed the script-file invocation
// as a string containing a piece of PowerShell code as follows:
// pipeline.Commands.AddScript("test.ps1 -stepx 'This is a test'");
var output = pipeline.Invoke(); // output[0] == "This is a test"
}