使用Powershell安装MSP在本地计算机上运行,​​远程失败。为什么?

时间:2013-05-15 00:33:53

标签: patch updates powershell-remoting msp

我需要一些Powershell建议。

我需要在多个Win08r2服务器上安装应用程序的MSP更新文件。如果我在本地运行这些命令,在目标机器的PS窗口中,它完全符合我的要求:

$command = 'msiexec.exe /p "c:\test\My Application Update 01.msp" REBOOTPROMPT=S /qb!'
invoke-wmimethod -path win32_process -name create -argumentlist $command

正在执行的文件 位于目标计算机上

如果我远程连接到计算机并执行这两个命令,它会打开两个x64 msiexec.exe进程和一个msiexec.exe * 32进程,然后就在那里。

如果我重新启动服务器,它不会显示更新已安装,所以我认为这不是时间问题。

我尝试使用这两行创建并远程执行PS1文件,但这似乎做同样的事情。

如果有人建议远程安装我的MSP更新,我会全力以赴。

我想我已经包含了我所拥有的所有信息,但是如果缺少某些内容,请提出问题,我会填写任何空白。

+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++

我的流程是:

  • 读取服务器名称和管理员密码的CSV
  • 使用密码
  • 创建凭据
  • 使用计算机名称和凭据创建新会话
  • 创建一个临时文件夹以保存我的更新MSP文件
  • 调用将更新文件下载到目标服务器的PS1文件
  • >>>创建一个新的System.Net.WebClient对象
  • >>>使用该Web客户端对象从源下载到目标服务器上的位置
  • 调用另一个应用刚刚下载的补丁的PS1文件 - >>这就是我遇到问题的地方。
  • >>>设置上面显示的变量
  • >>>执行变量
  • 中指定的文件
  • 关闭与目标服务器的会话
  • 转到CSV中的下一个服务器...

如果我打开PS窗口并手动设置变量,然后执行它(如上面的两行代码所示),它工作正常。如果我在目标服务器上创建一个包含相同两行代码的PS1文件,则右键单击> “使用PowerShell运行”它按预期/期望工作。如果我在PowerGUI中远程执行我的代码,它会返回一个看起来像这样的文本块,然后就坐在那里。 RDP进入服务器后,安装程序永远不会启动。我对“返回值”值的理解是“0”表示命令成功。

PSComputerName:xx.xx.xx.xx
RunspaceId:bf6f4a39-2338-4996-b75b-bjf5ef01ecaa
PSShowComputerName:真实 __GENUS:2
__CLASS:__PARAMETERS
__SUPERCLASS:
__DYNASTY:__PARAMETERS
__RELPATH:
__PROPERTY_COUNT:2
__DERIVATION:{}
__SERVER:
__NAMESPACE:
__PATH:
ProcessId:4808
ReturnValue:0

我甚至在变量和在桌面上创建文本文件的执行之间添加了一行代码,只是为了验证我是否进入了我的'executeFile'文件,并且确实创建了该文本文件。它似乎并没有远程执行我的MSP。

提前感谢您的协助!

Catt11。

2 个答案:

答案 0 :(得分:3)

这是我用来将msp嵌入到PowerShell脚本中的策略。它对我来说很完美。

$file = "z:\software\AcrobatUpdate.msp"
$silentArgs = "/passive"
$additionalInstallArgs = ""
Write-Debug "Running msiexec.exe /update $file $silentArgs"
$msiArgs = "/update `"$file`""
$msiArgs = "$msiArgs $silentArgs $additionalInstallArgs"
Start-Process -FilePath msiexec -ArgumentList $msiArgs -Wait

如果您不想使用变量,则可能不需要使用变量,您可以对值进行硬编码。我将此设置为我传递这些参数的函数,但如果这更像是一次性交易,则可能更容易对值进行硬编码。

希望有所帮助!

答案 1 :(得分:0)

使用Start-Process for MSP包不是一个好习惯,因为一些更新包lockdown powershell libs所以你必须使用WMI调用