SCCM Control Component - Prevent Interference with Login AM 2012

If you are, out of business reasons, in the situation that your servers can not completely be managed by Login AM or you need to share your maintenance window with, for example SCCM, then you need to be sure that none of these deployment solutions interfere with each other.
For this situation we developed a component that takes care of the SCCM 2007 Agent.
To be able to deploy and maintain clients with Login AM, without having problems with the SCCM Agent, a custom component with the goal to control the SCCM Agent has been developed. This blog describes the SCCM Control Component.
This custom component is placed under the Solution 4 Component.
Custom component for controling the SCCM Agent
The component has a System ActionSet with two phases:
System ActionSet
System - StartUpBegin
This phase is started after every reboot of the Login AM Client. It contains two tasks.
System StartIpBegin - SCCM copy
First task is the SCCM-Copy.ps1 script – it copies all necessary files like the SCCM-automation.dll from the S4_Sources folder to the %S4_Files%\Framework\SCCM folder on the client.
The second task is the SCCM-Client-disable.ps1 script that is responsible for disabling the SCCM service if there are no deployments currently running, otherwise the script will wait until the SCCM Agent service is inactive.
System - StartUpEnd
This phase contains a custom action set that executes a script responsible for enabling the SCCM agent again. Script name is SCCM-Client-enable.ps1.
System StartUpEnd - SCCM Client enable
Integration in component set Login AM
The custom component SCCM Control needs to be integrated in a component. As the scripts needs to run during deployment phase and every maintenance task, the best place to integrate it has been the Solution4 Base component set.
As the SCCM Client needs to be disabled before the Login AM Deployment starts it is necessary to change the startupBeginOrderNumber as shown in the screen shot below.
Solution 4 SCCM Control
Changes to standard Login AM framework
To be able to control the SCCM Agent also during Login AM Initialization we needed to change one small thing to the standard Login AM framework files.
The file that has been modified is Initialize-Solution4.ps1 and is located in the following folder:
%S4_Files%\Components\Solution4\Framework\Extensions\Framework\General
The section that has been modified is the section that builds the init script on the S4 client. The section is between row 116 and 123.
The change in this file is that if a file named pre-init.ps1 exists in the S4-Files location, this will be executed before the standard init.ps1 script is executed. In this case the pre-init.ps1 script does nearly the same as the SCCM-disable.ps1 script, it disables the SCCM Agent service.
#Create Init script Set-Content -path "\\$ComputerName\admin$\Initialize-Solution4.ps1" -value "$s4_files\Init.ps1 -e $S4_EnvironmentID" | out-null Add-Content -path "\\$ComputerName\admin$\Initialize-Solution4.ps1" -value "schtasks.exe /Delete /TN `"Solution4 Initialization`" /F"
After:
#Create Init script If (Test-Path -Path "$S4_files\pre-init.ps1") { Set-Content -Path "\\$ComputerName\admin$\Initialize-Solution4.ps1" -value "$s4_files\Pre-Init.ps1" | out-null Add-Content -path "\\$ComputerName\admin$\Initialize-Solution4.ps1" -value "$s4_files\Init.ps1 -e $S4_EnvironmentID" | out-null } Else { Set-Content -path "\\$ComputerName\admin$\Initialize-Solution4.ps1" -value "$s4_files\Init.ps1 -e $S4_EnvironmentID" | out-null } Add-Content -path "\\$ComputerName\admin$\Initialize-Solution4.ps1" -value "schtasks.exe /Delete /TN `"Solution4 Initialization`" /F"
This modification will probably move into the standard of future Login AM versions so that every customer has the possibility to execute necessary tasks before the initialization of Login AM.