您可以使用Windows Installer com對象來枚舉修補程序。
看看這篇文章。它不會做的正是你所需要的,但它提供了comObject.types.ps1xml文件,您需要:
http://www.snowland.se/2010/02/21/read-msi-information-with-powershell/
然後你就可以做到這一點,以獲得補丁:
$installer_obj = New-Object -com WindowsInstaller.Installer;
$patches = $installer_obj.InvokeParamProperty("PatchesEx", "Product-Code-GUID", "s-1-1-0", 7, 15);
Product-Code-GUID是您感興趣的產品的GUID。我更願意枚舉產品列表,並根據人類可讀的名稱以編程方式獲取GUID(即在「添加/刪除程序」中顯示的名稱)。
$installer_obj = New-Object -com WindowsInstaller.Installer;
$all_products = $installer_obj.GetProperty("Products");
foreach($product_code in $all_products) {
$product_name = $installer_obj.InvokeParamProperty("ProductInfo", $product_code, "ProductName")
if($product_name -eq "MySQL Server 5.1") {
$interesting_product_code = $product_code;
}
}
$patches = $installer_obj.InvokeParamProperty("PatchesEx", $interesting_product_code, "s-1-1-0", 7, 15);
要麼你走,路線現在你只需要遍歷$補丁和使用適當的參數從命令行調用MSIEXEC(如果您選擇使用一個字符串爲$ interesting_product_code,只需更換與文字字符串GUID的變量和級聯):
foreach($patch in $patches) {
$patch_code = $patch.GetProperty("PatchCode");
$argument_list = "/I" + $interesting_product_code + " MSIPATCHREMOVE=$patch_code /qb /norestart";
Start-Process -FilePath "msiexec.exe" -ArgumentList $argument_list -Wait;
}
這是對Windows Installer com對象的引用。你可以做一些其他有趣的東西與它太:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa369432%28v=vs.85%29.aspx
希望幫助, 亞倫
工程。儘管沒有足夠的「聲譽」來投票回答。 – gregs 2013-05-13 12:58:55