1

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

谁能告诉我我做错了什么?

4

2 回答 2

6

这并不是我的问题的真正答案,但它解决了我远程卸载 MSI 的问题。我希望这可以帮助其他人,因为我在过去的 3 个小时里尝试了各种技术!

事实证明,这可以通过一行代码来实现!

(Get-WmiObject -Class Win32_Product -Filter "Name='x.Int.MIS for BizTalk 2010 3.0.0'" -ComputerName $TargetServer).Uninstall()

由以下技术网页面提供:http ://technet.microsoft.com/en-us/library/dd347651.aspx

于 2012-08-07T14:59:55.737 回答
1

抱歉,由于我正在回复,PC 的后期编辑崩溃了,所以它更新了一半。

问题是 start 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-07T14:45:02.757 回答