我正在使用一种实用程序来自动化一些进程,并且一项任务是在远程计算机上安装.msi
文件。该文件位于远程计算机上的C:\Users\username
中,为简单起见,文件名为file.msi
。我正在使用的命令是:
Invoke-Command -ComputerName $remoteMachine -ScriptBlock{cmd /c start /wait msiexec /i $installPath /quiet}
当我在本地开发机上执行此操作时,它不会显示任何错误,但不会安装文件。
但是,当我将确切的命令复制到方括号内并在远程计算机上的PowerShell脚本中运行它时,它将成功安装。我知道我的$remoteMachine
是正确的,因为我在脚本的其余部分中都广泛使用它。
我知道$installPath
变量也不是问题,因为出于测试目的,我对完整路径进行了硬编码,但仍未安装。
我对远程计算机也具有适当的权限,因为在脚本的前面,我将.msi
从一台计算机复制并粘贴到另一台计算机上没有问题。
我尝试了命令的组合,并且在这里停留了一段时间,所以任何帮助将不胜感激!
答案 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开关。取决于您要安装的内容。