从远程计算机卸载程序
问题描述:
我想卸载远程计算机上的程序。我知道用于安装的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
谁能请指教一下我做错了吗?
答
这不是我的问题的答案,但它解决了我远程卸载MSI的问题。我希望这可以帮助别人,因为我花了最后3个小时尝试各种技术!
事实证明,这可以通过一行代码来实现!
(GET-WmiObject可以-Class的Win32_Product筛选器 “名称= 'x.Int.MIS的BizTalk 2010 3.0.0'” -ComputerName $ TargetServer).Uninstall()
以下TechNet页面的礼貌: http://technet.microsoft.com/en-us/library/dd347651.aspx
答
对不起,由于我回复,所以它的一半更新,电脑的编辑后期崩溃。
问题是,启动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"
感谢您的回答,但我找到了替代解决方案来解决我的更广泛的问题 – 2012-08-07 15:00:44
这将解释为什么它不起作用,我遇到了同样的问题并最终导致了这个问题。 – justinf 2012-08-07 15:13:53