Wenn noch SCCM-Pakete auf einem gelöschten Distribution Point liegen…
Freitag, 15. Oktober 2010, 21:32
Abgelegt unter: Erkenntnisse | Tags: , , ,

Kürzlich entfernte ich einen nicht mehr gebrauchten Distribution Point. Dies ging ruckzuck: Flugs im „Site Management“ unter den „Site Systems“ der entsprechenden Site den betreffenden Server ausgewählt und die Rolle „ConfigMgr Distribution Point“ entfernt. Fertig!

Fertig? Nein, leider nicht ganz…

Der Distribution Point wurde überall aus den Listen entfernt und man konnte auf diesem auch keine Pakete mehr verwalten. Auf den ersten Blick schien alles in bester Ordnung zu sein. Auf den zweiten Blick hingegen…

Immer wieder tauchten seither Fehlermeldungen auf, dass ein bestimmtes Paket auf dem betreffenden Distribution Point nicht bereitgestellt oder entfernt werden konnte. Und wenn man dann die betreffenden Pakete in der Konsole betrachtete, war tatsächlich der betreffende Distribution Point noch im „Package Status“ aufgelistet, zumeist mit einem Status „Removal Pending“. Dabei war doch dieser Distribution Point längst gelöscht und der entsprechende Server ausrangiert und entsorgt.

Was nun?

Ein entsprechender Artikel „How to Remove a Distribution Point“ aus dem Microsoft Technet half etwas weiter, da dort folgendes dokumentiert ist:

1. Remove all distribution package folders and the SMSPKGSIG signature folder from the distribution point computer.
Important: You must manually remove these components before removing the distribution point role.

Tja, hinterher ist man immer schlauer. Bloss war es etwas schwierig für mich, diese Anweisung nachträglich umzusetzen, da der Distribution Point längst weg war.

Da ich vermutete, dass ich nicht der einzige bin, der einen Distribution Point gelöscht hat, bevor er die Packages von diesem Distribution Point entfernt hatte, suchte ich weiter und fand einen Thread in den System Center Foren von Microsoft, bei welcher dieses Problem diskutiert wurde. Als Lösung wurde dabei auf einen Beitrag im „System Center WebLog by Russ Slaten“ verwiesen, dessen Titel „Removing a retired DP from all your packages“ vielversprechend aussah.

Dieser Beitrag beschreibt, dass das Entfernen der Rolle „Distribution Point“ nicht auch automatisch die Pakete von diesen Distribution Point entferne. Man müsse vorgängig die Pakete vom Distribution Point entfernen, was ziemlich mühsam werden kann, wenn man eine grössere Menge von Paketen auf dem betreffenden Distribution Point bereitgestellt hat. Netterweise stellt Russ Slaten bei dem betreffenden Beitrag ein VB-Skript bereit, mit dem diese Aufgabe automatisiert durchgeführt werden kann. Die Angabe der Namen des Site Servers und des leerenden Distribution Points als Parameter bei Aufruf seines Skriptes „SMSDPClean.vbs“ reichen, und schon würden alle Pakete vom betreffenen Distribution Point entfernt werden.

Wie ich dann leider herausfinden musste, funktioniert dieses Skript problemlos, zumindest solange der Distribution Point noch nicht vom Netzwerk entfernt wurde. Das Skript deckt zwar mit einer kleinen vorzunehmenden Modifikation den Fall ab, dass ein Distribution Point schon gelöscht wurde, doch in meinem Falle mit dem bereits entsorgten Distribution Point half das Skript nicht wirklich weiter.

Langsam aber sicher fragte ich mich, weshalb beim Entfernen der Rolle „Distribution Point“ keine entsprechenden Warn- oder Fehlermeldungen erscheinen, die darauf hinweisen, dass man diese Rolle nicht entfernen solle bzw. könne, da diesem Distribution Point noch Packages zugewiesen seien. Wehmütig dachte ich an den Assistenten, der beim Löschversuch einer Collection erscheint, der auf detaillierteste Weise beschreibt, was alles geschehen wird, wenn man diese Collection löscht.

Jegliches Sinnieren über mögliche Unzulänglichkeiten der SCCM-Konsole half mir jedoch nicht weiter. Ich hatte ein Problem, und das sollte gelöst werden! Also las und suchte ich weiter und stiess auf den Artikel „Deletion of Orphaned Distribution Points“ von Brett Wilms in seinem „System Management Blog“. Und dieser Beitrag half tatsächlich weiter!

Doch bevor ich die Lösung des Problemes präsentieren kann, ist nun ein Warnhinweis fällig:

Die direkte Modifikation einer SCCM-Datenbank wird von Microsoft grundsätzlich nicht unterstützt, ausser sie erfolgt direkt auf Anweisung der Microsoft Support Services. Die beschriebene Lösung hat beim Autor dieses Artikels funktioniert und wird als Beispiel publiziert, wie die Problematik gelöst werden könnte. Die unsachgemässe Anwendung der beschriebenen Lösung kann negative Folgen auf eine SCCM-Umgebung haben. Testen Sie die beschriebene Lösung unbedingt in Ihrer Testumgebung, bevor sie diese auf eigene Verantwortung und eigenes Risiko in Ihrer Produktionsumgebung anwenden. Bitte wenden Sie diese Lösung in Ihrer Umgebung nur genau dann an, wenn Sie wissen was sie tun, und kontaktieren Sie die Microsoft Support Services bei jeglicher Unsicherheit.

Mit Hilfe des SQL Server Management Studio konnte ich mit Hilfe der nachfolgenden beiden Queries sehen, welche Einträge zum fraglichen Distribution Point noch in der Datenbank vorhanden waren, wobei natürlich <DistributionpointName> durch den Namen des gelöschten Distribution Points zu ersetzen ist:

SELECT * FROM PkgServers WHERE NALPath like '%<DistributionpointName>%'

SELECT * FROM PkgStatus WHERE PkgServer like '%<DistributionpointName>%'

Als ich mich davon überzeugt hatte, dass diese beiden Queries tatsächlich genau (und nur!) die Einträge zum gelöschten Distribution Point lieferten, und ich mich zudem vergewissert hatte, dass ich ein korrektes und aktuelles Backup der betreffenden Site vorliegen hatte, wagte ich es, die folgenden beiden Queries zu starten, um die Spuren des gelöschten Distribution Points in der Datenbank zu beseitigen:

DELETE FROM PkgServers WHERE NALPath like '%<DistributionpointName>%'

DELETE FROM PkgStatus WHERE PkgServer like '%<DistributionpointName>%'

Und tatsächlich: Seither sind die Fehlermeldungen verschwunden.