Передача переменных в Invoke-Command, внутри inlineScript, внутри рабочего процесса - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь создать скрипт, который подключается к различным серверам, должен присоединить PSDrive и копировать файлы. Проблема заключается в том, что я не могу передать переменную в блок скриптов Invoke-Command.

workflow kopijobb {
    param ([string[]]$serverList, $creds, $basePath)

    foreach -parallel ($server in $serverList){

        # Use the sequence keyword, to ensure everything inside of it runs in order on each computer.
        sequence {

            #Use the inlinescript keyword to allow PowerShell workflow to run regular PowerShell cmdlets
            inlineScript{

                $path = $using:basePath

                Write-Host "Starting $using:server using $path"
                #Create session for New-PSSession
                $session = New-PSSession -ComputerName $using:server -Credential $using:creds

                # Copy Java and recreate symlink
                Invoke-Command -Session $session -ScriptBlock {

                    # Make a PSDrive, since directly copying from UNC-path doesn't work due to credential-issues
                    New-PSDrive -Name N -PSProvider FileSystem -root $using:path -Credential $using:creds | out-null

Я передаю сетевой путь в $ basePath и могу прочитать его внутри блока inlineScript (где я пытался сохранить его в новой переменной для тестирования), но как только я пытаюсь получить к нему доступ в New-PSDrive команда, переменная внезапно пуста / недоступна, и установка привода завершается с ошибкой Cannot bind argument to parameter 'Root' because it is null.

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

1 Ответ

0 голосов
/ 08 мая 2018

Если мне неловко отвечать на мой собственный вопрос, особенно в тот же день, но я столкнулся с гуру PowerShell на работе, он одним взглядом посмотрел на сценарий и увидел проблему:

Мне пришлось добавить-Args для Invoke-Command

            Invoke-Command -Session $session -ScriptBlock {
                param($srv,$login,$path,$...)

                #Make a PSDrive, since directly copying from UNC-path doesn't work due to credential-issues
                New-PSDrive -Name N -PSProvider FileSystem -root $path -Credential $login | out-null
            } -Args $using:server,$using:creds,$using:basePath,$using:...

Это, конечно, означает, что мне пришлось импортировать все необходимые аргументы с верхнего уровня в рабочий процесс, а затем в Invoke-Command.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...