2012-08-07 229 views
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 

誰能請指教一下我做錯了嗎?

回答

6

這不是我的問題的答案,但它解決了我遠程卸載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

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" 
+0

感謝您的回答,但我找到了替代解決方案來解決我的更廣泛的問題 – 2012-08-07 15:00:44

+0

這將解釋爲什麼它不起作用,我遇到了同樣的問題並最終導致了這個問題。 – justinf 2012-08-07 15:13:53