使用PowerShell在远程计算机上安装MSI文件

时间:2018-06-27 20:10:06

标签: powershell

我正在使用一种实用程序来自动化一些进程,并且一项任务是在远程计算机上安装.msi文件。该文件位于远程计算机上的C:\Users\username中,为简单起见,文件名为file.msi。我正在使用的命令是:

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{cmd /c start /wait msiexec /i $installPath /quiet}

当我在本地开发机上执行此操作时,它不会显示任何错误,但不会安装文件。

但是,当我将确切的命令复制到方括号内并在远程计算机上的PowerShell脚本中运行它时,它将成功安装。我知道我的$remoteMachine是正确的,因为我在脚本的其余部分中都广泛使用它。

我知道$installPath变量也不是问题,因为出于测试目的,我对完整路径进行了硬编码,但仍未安装。

我对远程计算机也具有适当的权限,因为在脚本的前面,我将.msi从一台计算机复制并粘贴到另一台计算机上没有问题。

我尝试了命令的组合,并且在这里停留了一段时间,所以任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

理想情况下,这应该可行。

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{msiexec /i $installPath /quiet}

失败的原因是因为您没有将$installPath作为参数列表传递。像这样修改它。

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{
param(
    [Parameter(Mandatory=$true,
                   Position=0)]
    $installPath
    )
cmd /c start /wait msiexec /i $installPath /quiet
} -ArgumentList $installPath

但是,如果它不起作用,这是我前一段时间使用的解决方法。 使用命令msiexec /i $installPath /quiet创建一个.bat文件,并将其推入该位置,就像推入msi文件一样。

现在从调用脚本块中,只需调用bat文件即可。

Invoke-Command -ComputerName $remoteMachine -ScriptBlock{C:\Users\Username\Install.bat}

其中Install.bat是bat文件的名称。

注意:如果您不想引起重新引导,则可能还需要使用/ norestart开关。取决于您要安装的内容。