我想从远程计算机上卸载程序。我知道用于安装的MSI的位置,它位于远程服务器上,路径可以在下面的变量$MSIPathFile
中看到。
当我运行以下脚本时:
$TargetServer = "d-vasbiz01"
$MSIPathFile = "c:\biztalkdeployment\x.Int.MIS-3.0.0.msi"
Invoke-Command -Computer $TargetServer -ScriptBlock {Param($MSIPathFile, $UninstallFlag, $QuietFlag) Start-Process msiexec.exe "/x" $MSIPathFile "/qn"} -ArgumentList "$MSIPathFile", "/x", "/qn"
我收到以下错误:
Invoke-Command -Computer $TargetServer -ScriptBlock {Param($MSIPathFile, $UninstallFlag, $QuietFlag) Start-Process msiexec.exe "/x" $MSIPathFile "/qn"} -ArgumentList "$MSIPathFile", "/x", "/qn"
A positional parameter cannot be found that accepts argument 'c:\biztalkdeployment\x.Int.MIS-3.0.0.msi'.
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
任何人都可以告诉我我做错了什么吗?
答案 0 :(得分:6)
这不是我的问题的答案,但它解决了我远程卸载MSI的问题。我希望这可以帮助别人,因为我花了最近3个小时尝试各种技术!
事实证明,这可以通过一行代码来实现!
(Get-WmiObject -Class Win32_Product -Filter“Name ='x.Int.MIS for BizTalk 2010 3.0.0'” - ComputerName $ TargetServer).Uninstall()
由以下technet页面提供:http://technet.microsoft.com/en-us/library/dd347651.aspx
答案 1 :(得分:1)
很抱歉,由于我的回复,电脑的后期编辑崩溃了所以它更新了一半。
问题是启动Start-Process似乎没有扩展变量并使用命令执行它。所以我要做的就是建立一个包含可执行文件路径的字符串,然后建立另一个我想要使用的参数。然后我使用Invoke-expression命令来执行它。 下面是一个例子,如果你愿意我可以编辑你的代码,但我想你可能想要一个例子和解释。
$MSIPathFile = "c:\biztalkdeployment\x.Int.MIS-3.0.0.msi"
$msiexec = "C:\Windows\System32\msiexec.exe"
$arguments = '/x' + $MSIPathFile + " /qn"
Invoke-Expression -Command "$msiexec $arguments"