pssession, invoke-команда не получает переменную - PullRequest
0 голосов
/ 26 апреля 2018

Итак, вот код, который у меня есть:

    $computerName = read-host "Enter Computer Name"
    $IPCName = read-host "Enter IPC Profile name"
    $uName = read-Host "Enter SU account"
    $pw = read-host "Password"
    $pwe = convertto-securestring -AsPlainText -Force -String $pw
    $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "CHILDRENS\$uName",$pwe
    [string]$ipcdevcmd="FREEFORMDEVICENAME=`"$IPCName`""
    [string]$tftp1='TFTP1="10.200.254.69"'
    [string]$tftp2='TFTP2="172.16.90.205"'
    $arrayofargs= ('/i','C:\IPCommunicator\CiscoIPCommunicatorSetup.msi','/qn',$ipcdevcmd,$tftp1,$tftp2)
    $rtn = Test-Connection -CN $computerName -Count 1 -BufferSize 16 -Quiet
    IF($rtn -match 'TRUE'){
    echo 'machine Pings'
    $session = New-PSSession -ComputerName $computerName -credential $cred
    echo 'Testing Path'
    $path = Invoke-Command -Session $session {Test-Path C:\IPCommunicator}
    IF($path -match "False"){
    echo "Need to make Directory"
    Invoke-Command -Session $session {mkdir C:\IPCommunicator}
    robocopy C:\IPCommunicator \\$computername\C$\IPCommunicator /MIR
    echo 'Files Copied to New Directory'
    }
    ELSE { 
    robocopy C:\IPCommunicator \\$computername\C$\IPCommunicator /MIR
    echo 'Files Copied to Existing Directory'
    }
    echo 'invoking install'
    Invoke-Command -Session $session {Start-Process msiexec.exe -argumentlist $arrayofargs}
    echo 'install invoked'
    }
    ELSE {
    echo 'unable to ping system'
    }
    read-host "Press enter"

Что я получаю в ответ: вызов install (для справки) "Невозможно проверить аргумент параметра ArgumentList. Аргумент нулевой или пустой.Укажите аргумент, который не является нулевым или пустым, и повторите команду. "вызов вызван (для справки)

Я думаю, что происходит то, что он пытается использовать локальные переменные машины вместо предоставленных пользователем переменных в исходной ячейке.Вся цель состоит в том, чтобы запустить установку, которая предварительно устанавливает определенные переменные через аргументы MSI.Они действительны и из пакета с я могу сделать это на локальном ПК просто отлично.Когда я пытаюсь передать эти переменные с МОГО компьютера, на котором выполняется скрипт, на компьютер пользователя с помощью команды invoke, он не видит мои локально установленные переменные.Как, черт возьми, я передаю их.

Разбитый сам по себе ...

... возвращает мои входные данные для каждого из аргументов правильно, в правильной строковой форме.Каким-то образом это теряется в команде invoke.: / не знаете, как передать эти переменные?Должен ли я писать в текст, а затем переместить файл и загрузить его из локального pssession?Должен быть лучший способ!

1 Ответ

0 голосов
/ 26 апреля 2018

Поскольку вы выполняете команду в другом сеансе, если вы не определили переменную в этом другом сеансе, он понятия не имеет, о чем вы говорите.Чтобы обойти это, используйте область действия $using:.Эта строка выглядит так:

    Invoke-Command -Session $session {Start-Process msiexec.exe -argumentlist $using:arrayofargs}
...