Вызвать второй скрипт с аргументами из скрипта

Я относительно новичок в PowerShell и имею скрипт, который читает файл конфигурации, в результате чего получается набор пар имя-значение, которые я хотел бы передать в качестве аргументов функции во втором скрипте PowerShell.

Я не знаю, какие параметры будут помещены в этот файл конфигурации во время разработки, поэтому прямо в тот момент, когда мне нужно вызвать этот второй сценарий PowerShell, у меня в основном только одна переменная, которая имеет путь к этому второму сценарию, и вторая переменная, которая представляет собой массив аргументов для передачи сценарию, указанному в переменной пути.

Таким образом, переменная, содержащая путь ко второму сценарию ($ scriptPath), может иметь значение вроде:

"c:\the\path\to\the\second\script.ps1"

Переменная, содержащая аргументы ($ argumentsList), может выглядеть примерно так:

-ConfigFilename "doohickey.txt" -RootDirectory "c:\some\kind\of\path" -Max 11

Как мне перейти от этого положения дел к выполнению script.ps1 со всеми аргументами из $ argumentsList? I '

Мне бы хотелось, чтобы все команды write-host из этого второго сценария были видны консоли, из которой вызывается этот первый сценарий.

Я пробовал точечный источник, Invoke-Command, Invoke-Expression и Start-Job, но у меня нетне нашел подход, который нене дает ошибок.

Например, я подумал, что самым простым первым способом было попробовать Start-Job, который называется следующим образом:

Start-Job -FilePath $scriptPath -ArgumentList $argumentList

... но это не с этой ошибкой:

System.Management.Automation.ValidationMetadataException:
Attribute cannot be added because it would cause the variable
ConfigFilename with value -ConfigFilename to become invalid.

...в этом случае, "ConfigFilename» это первый параметр в списке параметров, определенный вторым сценарием, и мой вызов, очевидно, пытается установить его значение на "-ConfigFilename», который, очевидно, предназначен для идентификации параметра по имени, а не для установки его значения.

Что мне не хватает?

РЕДАКТИРОВАТЬ:

Хорошо, вот макет сценария для вызова в файле с именем invokee.ps1

Param(
[parameter(Mandatory=$true)]
[alias("rc")]
[string]
[ValidateScript( {Test-Path $_ -PathType Leaf} )]
$ConfigurationFilename,
[alias("e")]
[switch]
$Evaluate,
[array]
[Parameter(ValueFromRemainingArguments=$true)]
$remaining)

function sayHelloWorld()
{
    Write-Host "Hello, everybody, the config file is ."
    if ($ExitOnErrors)
    {
        Write-Host "I should mention that I was told to evaluate things."
    }
    Write-Host "I currently live here: $gScriptDirectory"
    Write-Host "My remaining arguments are: $remaining"
    Set-Content .\hello.world.txt "It worked"
}

$gScriptPath = $MyInvocation.MyCommand.Path
$gScriptDirectory = (Split-Path $gScriptPath -Parent)
sayHelloWorld

... а вот макет вызывающего скрипта в файле с именем invokee.ps1:

function pokeTheInvokee()
{
    $scriptPath = (Join-Path -Path "." -ChildPath "invokee.ps1")
    $scriptPath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($scriptPath)

    $configPath = (Join-Path -Path "." -ChildPath "invoker.ps1")
    $configPath = $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($configPath)

    $argumentList = @()
    $argumentList += ("-ConfigurationFilename", "`"$configPath`"")
    $argumentList += , "-Evaluate"

    Write-Host "Attempting to invoke-expression with: `"$scriptPath`" $argumentList"
    Invoke-Expression "`"$scriptPath`" $argumentList"
    Invoke-Expression ".\invokee.ps1 -ConfigurationFilename `".\invoker.ps1`" -Evaluate
    Write-Host "Invokee invoked."
}

pokeTheInvokee

Когда я запускаю invoker.ps1, это ошибка, которую яВ настоящее время я получаю первый вызов Invoke-Expression:

Invoke-Expression : You must provide a value expression on
the right-hand side of the '-' operator.

Второй вызов работает просто отлично, но одно существенное отличие состоит в том, что первая версия использует аргументы, пути которых содержат пробелы, а вторая - нет. Я неправильно обращаюсь с наличием пробелов в этих путях?

Ответы на вопрос(7)

Ваш ответ на вопрос