SCCM 2012: FEP Policy cannot be applied (ErrorCode –2147467259)
In SCCM 2012 ist der Forefront Endpoint Protection (FEP) Client noch stärker im Configuration Manager (SCCM) integriert worden. Daher kümmert sich auch der SCCM Client um das Einspielen der FEP Policy, die als XML File vorliegt.
In einigen Fällen scheitert dies aber und die Clients erhalten in der SCCM Konsole im Bereich FEP den Status fehlerhaft.
Bei der ersten Analyse hilft das Log EndpointProtectionAgent.log auf dem Client (%systemroot%\ccm\logs). In diesem Fall war folgende Fehlermeldung zu lesen:
<![LOG[Create Process Command line: "c:\Program Files\Microsoft Security Client\\ConfigSecurityPolicy.exe" "C:\WINDOWS\CCM\EPAMPolicy.xml".]LOG]!><time=”09:44:00.851-60″ date=”01-28-2013″ component=”EndpointProtectionAgent” context=”" type=”1″ thread=”4452″ file=”epagentutil.cpp:607″>
<![LOG[Failed to apply the policy C:\WINDOWS\CCM\EPAMPolicy.xml with error (0x80004005).]LOG]!><time=”09:44:00.916-60″ date=”01-28-2013″ component=”EndpointProtectionAgent” context=”" type=”3″ thread=”4452″ file=”epagentimpl.cpp:647″>
<![LOG[Save new policy state 2 to registry SOFTWARE\Microsoft\CCM\EPAgent\PolicyApplicationState]LOG]!><time=”09:44:00.966-60″ date=”01-28-2013″ component=”EndpointProtectionAgent” context=”" type=”1″ thread=”4452″ file=”epagentimpl.cpp:267″><![LOG[State 2 and ErrorCode -2147467259 and ErrorMsg Failed to open the local machine Group Policy and PolicyName Antimalware Policy and GroupResolveResultHash A3B029F0133B36CFF682D8CD9BB02D6952B1C9E3 is NOT changed.]LOG]!><time=”09:44:00.967-60″ date=”01-28-2013″ component=”EndpointProtectionAgent” context=”" type=”1″ thread=”4452″ file=”epagentimpl.cpp:339″>
Interessant ist die letzte Zeile: “State 2 and ErrorCode -2147467259 and ErrorMsg Failed to open the local machine Group Policy and PolicyName Antimalware Policy and GroupResolveResultHash”. Eine kurze Recherche im Web ergibt, dass dieser Fehler mit einem Berechtigungsproblem auf die lokalen Gruppenrichtliniendateien zusammenhängen kann, d.h. eine eingerichtete Lokale Gruppenrichtlinieneinstellung hat sich verharkt, so dass das lokale System keinen Schreibzugriff mehr hat. Ein einfaches Löschen dieser Datei (c:\windows\system32\GroupPolicy\Machine\registry.pol) behebt das Problem. Der Ordner GroupPolicy ist im Allgemeinen versteckt.
Möchte man dies remote ausführen, so bietet sich folgende kleine Batchdatei an:
@echo off
call %~dp0findip.cmd %~1
if %ip%.==. goto fehler
echo PC %1 ist erreichbar.
del \\%1\c$\windows\System32\GroupPolicy\Machine\registry.pol
rem remote start gpupdate
psexec \\%1 gpupdate /force
rem update fep policy
SendSchedule.exe {00000000-0000-0000-0000-000000000222} %1
rem update sccm wsus policy
SendSchedule.exe {00000000-0000-0000-0000-000000000108} %1
goto ende
:fehler
echo PC %1 ist nicht erreichbar.
goto ende
:ende
Die Datei benötigt die findip.cmd, die ich bereits in einigen vorhergehenden Batchdateien eingesetzt habe, um zu kontrollieren, ob ein Client online ist. Zusätzlich wird psexec.exe zum Remoteausführen von gpupdate und sendschedule.exe aus dem SCCM Client Toolkit benötigt.
Diese Batchdatei führt folgendes aus:
- Kontrollieren, ob der per Parameter übergebene PC erreichbar ist
- Löschen der lokalen GPO Datei
- Ein Gruppenrichtlinienupdate erzwingen, damit Einstellungen von der Domäne ggfl. korrigiert werden
- Dem SCCM Client mitteilen, dass er die FEP Policy neu einspielen soll
- Dem SCCM Client mitteilen, dass er die WindowsUpdate Einstellungen neu eintragen soll
Hintergrund: Die SCCM Komponenten für das Update Management und FEP benötigen beide Schreibzugriff auf lokale Policies. Dabei werden die Einstellungen in die oben erwähnte registry.pol Datei ablegt. Ist dies nicht möglich so kommt es zu dem oben erwähnten Fehler.
Im letzten Teil wurde eine Batchdatei zur Erzeugung von CCR Dateien vorgestellt. Möchte man direkt eine komplette Collection installieren lassen, dann läßt sich dies wieder einfach mit der getcomputer.vbs Datei umsetzen:
Im vierten Teil wird eine Batchdatei zum Remoterollout des SCCM Clients vorgestellt. Dazu wird ein Client Configuration Request (CCR) erzeugt und in das entsprechende SCCM Verzeichnis abgelegt. Auf dieses reagiert der Server und versucht den Client remote zu installieren (ähnlich des Clientrollouts über die MMC Konsole).
Vor über einem Jahr habe ich angefangen meine SCCM Hilfsscripte hier zu veröffentlichen. Da ich noch eine ganze Reihe von diesen Batchdateien habe, kommen jetzt noch einige weitere Posts zu diesem Thema.
Kleine Batchfiles sind immer wieder praktisch um schnell kleinere Probleme zu lösen. Diesmal stelle ich ein paar Dateien vor, die zum Erstellen und Kopieren verschiedener Dateien eingesetzt werden können. Dies ist z.B. Hilfreich wenn man die Transfergeschwindigkeit testen möchte. Das eingesetzte Robocopy zeigt am Ende die durchschnittliche Geschwindigkeit an.
Wie versprochen geht es weiter mit der Automatisierung von Enteo durch Powershell. In diesem Blog Eintrag nehme ich mir die Funktion für das Aufwecken eines PCs vor. Leider funktioniert hier die WoL Funktion von Enteo nicht immer. Das liegt u.a. daran, dass bei einem neuen PC nicht alle Informationen vorliegen. In den meisten Netzen wird ein normales WoL Paket (ein Broadcast Paket) nicht an alle Subnetze verteilt. Der Enteo Server und der zu weckende Client sind im Allgemeinen in unterschiedlichen Subnetzen beheimatet. Daher muss mit einem directed Broadcast gearbeitet werden. Dazu wird das Broadcast Paket direkt an die Broadcast Adresse des Zielsubnetzes geschickt. Dazu ist aber die IP Adresse und die Subnetzmaske zur Ermittlung der Broadcast Adresse notwendig. Diese Information liegt Enteo nicht immer vor und ich habe noch keinen Weg gefunden, diese Info beim Erstellen des Computerkontos mitzugeben.

