从远程计算机卸载程序

问题描述:

我想卸载远程计算机上的程序。我知道用于安装的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" 
+0

感谢您的回答,但我找到了替代解决方案来解决我的更广泛的问题 – 2012-08-07 15:00:44

+0

这将解释为什么它不起作用,我遇到了同样的问题并最终导致了这个问题。 – justinf 2012-08-07 15:13:53