0

我需要一些 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 中的下一个服务器...</li>

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

PSComputerName : xx.xx.xx.xx
RunspaceId : bf6f4a39-2338-4996-b75b-bjf5ef01ecaa
PSShowComputerName : True
__GENUS : 2
__CLASS : __PARAMETERS
__SUPERCLASS :
__DYNASTY : __PARAMETERS __RELPATH
:
__PROPERTY_COUNT : 2
__ACE: 进程 __SERIVATIONSP : :4808 返回值:0




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

预先感谢您的协助!

猫 11。

4

2 回答 2

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

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

希望有帮助!

于 2013-10-30T12:02:39.037 回答
0

对 MSP 包使用 Start-Process 不是一个好习惯,因为某些更新包锁定了 powershell 库,因此您必须使用 WMI 调用

于 2014-08-20T18:36:24.317 回答