-1

So here's the code I have so far:

    $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"

What I get back is: invoking install(for reference) "Cannot validate argument on parameter 'ArgumentList'. The argument is null or empty. Provide an argument that is not null or empty and then try the command again." install invoked(for reference)

What I think is happening is that it is trying to use the machine local variables instead of the user supplied variables on the originating box. The whole aim is to trigger an install that pre-sets certain variables thru the MSI arguments. Those are valid and from a batch with i can do it on the local pc just fine. When I try to pass those variables from MY computer running the script to the user's pc via invoke-command it is not seeing my locally set variables. How the heck do I pass them through.

Broken down by itself...

...returns my inputs for each of the arguments correctly, in a valid stringy form. Somehow that is getting lost in the invoke command. :/ not sure how to pass those variable over? Should I write to text and then move the file over and load it from the local pssession? There has to be a better way!

Ian Kemp
  • 28,293
  • 19
  • 112
  • 138

1 Answers1

0

Because your are executing the command in another session, unless you define the variable in that other session it has no idea what you're talking about. To get around that use the $using: scope. That line then look like:

    Invoke-Command -Session $session {Start-Process msiexec.exe -argumentlist $using:arrayofargs}
TheMadTechnician
  • 34,906
  • 3
  • 42
  • 56