Powershell命令无法通过PSRemote工作

时间:2017-09-26 19:04:36

标签: powershell module remote-server msiexec

我在尝试通过PowerShell安装各种程序时遇到了一些问题。这是我构建的模块组件的示例(已修剪):

Function TEST-INSTALL-Scripts
{
    Param($basepath,$Arguments)

    $command = @"
cmd.exe /C msiexec /package `"$basepath`" $Arguments
"@
    Invoke-Expression -Command $command
}

当我尝试通过

调用它时
Invoke-Command -Session $session -ScriptBlock {TEST-INSTALL-Scripts -Basepath $basepath -Arguments $args}

该命令似乎没有做任何事情所以我尝试使用PSRemote选项卡尝试获取更多细节,我使用了这个命令:

$basepath = "\\$Server\d$\Files\Install\3rd Party\SQL Server Native Client\sqlncli_x64.msi"
$Arguments = '  /quiet /passive'
TEST-INSTALL-Scripts -basepath $basepath -Arguments $Arguments

我得到一个回复​​,说该文件无法访问或者它不是有效文件。

  

我正在寻找一个能够做到这一点的人。通过这种方式,您可以了解更多信息,了解更多信息,了解更多信息,了解更多信息,了解更多信息。   如果您想知道自己是谁,那就更好地了解您的知识产权。了解更多信息。

当我RDP到机器本身时,完全相同的命令没有任何问题。

我的研究指出这是一个双跳问题,但没有将文件复制到机器上,有没有办法处理这不是一场噩梦呢?

1 个答案:

答案 0 :(得分:0)

我能够在我通过安装路径的远程调用之前构建一个最小的解决方法。我还构建了一个函数,使管理器更容易,但我在这里放了一个示例IF语句(我构建了Get-InstallerLocal,它根据类型执行相同的复制)

        If($installPath.StartsWith("\\"))
        {
            $DeployPath = Invoke-Command -Session $session -ScriptBlock {$env:TEMP}
            $drive=(Get-Item $DeployPath).PSDrive.Name
            $localpath = $DeployPath
            $DeployPath = $DeployPath.Replace("$($drive):","\\$machine\$drive$")
            If(!(Test-Path "$DeployPath\3rd Party\Microsoft Visual C++ 2010 Redistributable"))
            {
                Copy-Item -Path "$installPath\3rd Party\Microsoft Visual C++ 2010 Redistributable" -Destination "$DeployPath\3rd Party\Microsoft Visual C++ 2010 Redistributable\" -Force -Recurse
            }
            If($ODBCDriver){Get-InstallerLocal -installPath $installPath -deployPath $DeployPath -Type "SQL Driver"}
            $installPath = $localpath
        }