2012-03-30 6 views
0

Ich versuche, ein Nicht-Microsoft MSP von einem Server zu entfernen, auf dem Win2k3 oder Win2k8 ausgeführt wird. Das Update wird in den Programmen zum Hinzufügen/Entfernen angezeigt, wenn Sie "Installierte Updates anzeigen" auswählen. Ich kann jedoch keine Möglichkeit finden, die MSP-GUID zu erhalten.Entfernen Sie Nicht-Windows-MSP-Pakete mit Powershell

ich geplant auf

msiexec /i {GUID-OF-PRODUCT} MSIPATCHREMOVE={GUID_OF_PATCH} /qb 

verwenden, die in diesem Artikel gefunden: how to remove the Patch from console

Ich habe jedoch keinen Weg, um den Patch-GUID von der Kommandozeile zu erhalten. Ist jemand anders in der Lage so etwas zu tun? Es gibt viele Möglichkeiten, dies für Microsoft Patches zu tun, aber da dies nicht Microsoft ist, hoffe ich, dass es noch möglich ist. Danke, Greg

Antwort

0

Sie können das Windows Installer-Objekt com, um die Patches aufzuzählen.

Überprüfen Sie diesen Artikel. Es ist nicht genau das tun, was man braucht, aber es bietet die comObject.types.ps1xml Datei benötigen Sie:

http://www.snowland.se/2010/02/21/read-msi-information-with-powershell/

Dann können Sie dies tun, um den Patch zu erhalten:

$installer_obj = New-Object -com WindowsInstaller.Installer; 
$patches = $installer_obj.InvokeParamProperty("PatchesEx", "Product-Code-GUID", "s-1-1-0", 7, 15); 

Product-Code-GUID ist die GUID für das Produkt, an dem Sie interessiert sind. Ich ziehe es vor, auch eine Liste von Produkten aufzulisten und die GUID programmatisch auf den von Menschen lesbaren Namen zu beziehen (dh den, der in Software angezeigt wird).

$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); 

Entweder Weg Sie nehmen, jetzt müssen Sie nur eine Schleife durch den $ Patches und rufen msiexec von der Kommandozeile mit den richtigen Argumenten (wenn Sie entscheiden sie eine Zeichenkette für den $ interesting_product_code zu bedienen, einfach ersetzen die Variable und Verkettung mit der Zeichenkette 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; 
} 

Hier ist ein Verweis auf das Windows Installer-cOM-Objekt. Sie können auch mit ihm einigen anderen lustigen Sachen tun:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa369432%28v=vs.85%29.aspx

Hoffnung, dass Aaron

+0

hilft, das funktioniert. Haben Sie nicht genug "Ruf", um die Antwort obwohl zu stimmen. – gregs