pssession,invoke-command没有变量

时间:2018-04-25 23:12:12

标签: powershell invoke-command ps1

所以这是我到目前为止的代码:

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

我得到的是:         调用安装(供参考)         “无法验证参数'ArgumentList'的参数。参数为null或为空。提供一个非null或空的参数,然后再次尝试该命令。”         安装调用(供参考)

我认为正在尝试使用机器局部变量而不是原始盒子上的用户提供的变量。 整个目标是触发通过MSI参数预先设置某些变量的安装。这些是有效的,从批量,我可以在本地电脑上做得很好。当我尝试通过invoke-command将运行脚本的MY计算机中的那些变量传递给用户的PC时,它没有看到我的本地设置变量。我怎么通过他们。

自行分解......

...以正确的字符串形式正确返回每个参数的输入。不知何故,这会在invoke命令中丢失。 :/不确定如何传递这些变量?我应该写文本,然后移动文件并从本地pssession加载它?必须有更好的方法!

1 个答案:

答案 0 :(得分:0)

因为您正在另一个会话中执行该命令,除非您在该另一个会话中定义该变量,否则它不知道您在说什么。要解决这个问题,请使用$using:范围。那条线看起来像:

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