none
Script zum starten von SCCM Aktionen RRS feed

  • Frage

  • Hallo

    Seit der Migration von WSUS auf SCCM haben wir das problem, dass wir die Installation der freigegebenen Updates im SCCM nicht mehr auf Befehl installieren können.

    Kennt jemand ein Script, mit welchem man die CCM Aktionen starten kann und das Maintenance Window löscht, damit der Server sofort einen Reboot macht (falls nötig)
    Ich bin für jeden Vorschlag dankbar.

    Gruss
    Daniel

     

    Freitag, 23. April 2010 14:05

Alle Antworten

  • Das ConfigMgr SDK (http://www.microsoft.com/downloads/details.aspx?familyid=064a995f-ef13-4200-81ad-e3af6218edcc&displaylang=en) enthält eigentlich alles, was Du brauchst.
    Erklär doch bitte mal das aktuelle Problem / Szenario genauer. Was ist wie konfiguriert? Was klappt nicht wie es soll? Wozu das Skript? etc
    Freitag, 23. April 2010 14:46
    Beantworter
  • Wir stellen für jeden Server eine Deadline im CCM ein in der die Server gepatcht und rebootet werden.
    Es gibt aber diverse Server(Veritas Cluster zbsp.) welche wir nicht automatisch rebooten wollen oder können.

    Vorher hatten wir WSUS im Einsatz und hatten ein modifiziertes Script benutzt welches alle freigegebenen Patches im WSUS installiert und einen Reboot ausgelöst hat.
    Mit der CCM Verteilung können wir diese Script nun nicht mehr benutzen, weil ja nicht mehr der Automatic Update Agent benutzt wird sondern der CCM Agent.
    Nun habe ich ein Script gefunden, mit welchem sich die CCM Actions anstossen lassen, aber leider funktioniert das nicht bei den 64bit 2008 Servern. Vermutlich würde es laufen, wenn wir die UAC deaktivieren würden, aber das sollte ja nicht das Ziel sein. Das Script funktioneirt auch, wenn es lokal auf dem Server liegt, aber auch das ist nicht so toll. Wir würden dann diese Script in unsere SCOM Umgebung einfügen, somit hätte wir das Script zentral verwaltet und könnten Anpassungen jeweils einmal erfassen und gut.

    Das wäre das Script, natürlich müsste man das noch schön schreiben, aber wie erwähnt klappt das auf x64 2008 Server nicht.

    '
    ' Main
    '
    ' Clear Maintenance Window
    Call ClearMaintenanceWindow()

    ' Scan
    Call InitiateSoftwareUpdatesScanCycle()

    ' Deploy
    Call InitiateSoftwareUpdatesEvaluationCycle()

    Sub InitiateSoftwareUpdatesEvaluationCycle()
        ' Set the required variables.
        actionNameToRun = "Software Updates Assignments Evaluation Cycle"

        ' Create a CPAppletMgr instance.
        Dim oCPAppletMgr
        Set oCPAppletMgr = CreateObject("CPApplet.CPAppletMgr")

        ' Get the available ClientActions object.
        Dim oClientActions
        Set oClientActions = oCPAppletMgr.GetClientActions()

        ' Loop through the available client actions. Run the matching client action when it is found.
        Dim oClientAction
        For Each oClientAction In oClientActions
            If oClientAction.Name = actionNameToRun Then
                oClientAction.PerformAction 
            End If
        Next

        wscript.echo "Ran: " & actionNameToRun
    End Sub

    Sub InitiateSoftwareUpdatesScanCycle()
        ' Set the required variables.
        actionNameToRun = "Updates Source Scan Cycle"

        ' Create a CPAppletMgr instance.
        Dim oCPAppletMgr
        Set oCPAppletMgr = CreateObject("CPApplet.CPAppletMgr")

        ' Get the available ClientActions object.
        Dim oClientActions
        Set oClientActions = oCPAppletMgr.GetClientActions()

        ' Loop through the available client actions. Run the matching client action when it is found.
        Dim oClientAction
        For Each oClientAction In oClientActions
            If oClientAction.Name = actionNameToRun Then
                oClientAction.PerformAction 
            End If
        Next
       
        wscript.echo "Ran: " & actionNameToRun
    End Sub

    Sub ClearMaintenanceWindow()
      Set oLocator = CreateObject("WbemScripting.SWbemLocator")
      Set oService = oLocator.ConnectServer(sComputerName, "root\ccm\policy\machine\actualconfig")

      Set oServiceWindows = oService.ExecQuery ("select * from CCM_ServiceWindow")
      For Each oServiceWindow In oServiceWindows
        oService.Delete oServiceWindow.Path_
      Next
      Set oService = Nothing
      Set oLocator = Nothing
    End Sub

    Falls wir hier völlig neben gängigen Methoden vorbeischiessen, bin ich auch für andere Tipps und Tricks dankbar.

    Gruss
    Daniel

     

    Montag, 26. April 2010 12:22