我需要一些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更新,我会全力以赴。
我想我已经包含了我所拥有的所有信息,但是如果缺少某些内容,请提出问题,我会填写任何空白。
+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++
我的流程是:
如果我打开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。
答案 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调用