从远程计算机卸载程序

时间:2012-08-07 11:17:34

标签: powershell

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

任何人都可以告诉我我做错了什么吗?

2 个答案:

答案 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"