我遇到了msiexec用Powershell刪除java的問題。我輸出了我的結果命令到屏幕上,並將其粘貼到一個批處理文件中,並且運行良好。但是當它通過Powershell執行時,它會失敗,說「找不到包」。任何人都可以發現我可能做錯了什麼嗎?我一直在上下查找谷歌,並嘗試了幾種不同的方式來執行命令,不帶成功和相同的結果。用msiexec Powershell卸載程序
cls
$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"}
$msiexec = "c:\windows\system32\msiexec.exe";
#$msiexecargs = '/x:"$app.LocalPackage" /qr'
$msiexecargs = '/uninstall "$app.IdentifyingNumber" /qr /norestart'
if ($java -ne $null)
{
foreach ($app in $java)
{
write-host $app.LocalPackage
write-host $app.IdentifyingNumber
#&cmd /c "msiexec /uninstall $app.IdentifyingNumber /passive"
#Start-Process -FilePath $msiexec -Arg $msiexecargs -Wait -Passthru
[Diagnostics.Process]::Start($msiexec, $msiexecargs);
}
}
else { Write-Host "nothing to see here..." }
Write-Host "check end"
目標是使用Windows 7登錄腳本在最終用戶系統上刪除所有版本的Java,然後安裝最新版本。我更喜歡把它全部製作成Powershell,但是如果我不能得到這個工作,我將只使用一個批處理文件,用硬編碼的卸載GUID的
寫主機語句都是爲了調試的目的, m只是對msiexec執行這種格式的一些變化感興趣:msiexec/x {GUID}/passive/norestart
我得到的錯誤是: 「這個安裝包無法打開,請檢查包是否存在並且您可以訪問它,或與應用程序供應商聯繫以確認這是一個有效的Windows安裝程序包。「
我知道它自己的作品,只是不在這個腳本...所以我認爲這是一個語法的東西。
如果您有任何問題,請告訴我。
對不起,我想展示我在代碼中嘗試的其他內容。我可以從哪裏獲得有關您所做修改的更多信息?這工作得很好。謝謝! – grep65535
我認爲http://blogs.msdn.com/b/powershell/archive/2006/07/15/variable-expansion-in-strings-and-herestrings.aspx是一個好的開始。有關更多信息,您需要一本書,例如深入操作/ PowerShell中的PowerShell等。 – stej