In my organisation only a few members of staff need to have access to the SCCM console, for obvious reasons I want to keep that to a minimum, never too good to let the patients run the asylum. When someone needs access they generally need more than the basic console. So I created an Uber console with all the addons and extensions that are needed.

I’m using the Powershell App Deployment Toolkit (PADT) created by Seán Lillis and Dan Cunningham, its one of my favourite resources and I pretty much package everything using this now. If you have not used it before, in a nut shell its a powershell wrapper and is incredibly powerful.
http://psappdeploytoolkit.com/

BTW I understand that I could have just created a deployment with many dependencies but for this deployment i prefer PADT

The PADT folder structure, the installation files go into the Files folder.

Whats installed

System Center Configuration Manager Console
The files are located on the site server \\SERVER\SMS_CM1\tools\ConsoleSetup

System Center Configuration Manager Support Center
Pretty handy for looking at logs.
https://www.microsoft.com/en-gb/download/details.aspx?id=42645

NowMicro – Recast Right Click tools
Brilliant set of right click tools that every admin should use.
http://www.nowmicro.com/Software/Recast

System Center 2012 R2 Configuration Manager Toolkit
Pretty handy set of tools including Content Library Explorer, CEViewer etc
https://www.microsoft.com/en-gb/download/details.aspx?id=50012

Microsoft Deployment Toolkit (6.3.8443.1000)
I use MDT OSD task sequences, this is also used for DaRT(on the site server).
https://www.microsoft.com/en-us/download/details.aspx?id=54259

System Center Configuration Manager Cmdlet Library
Who can live with out PowerShell
https://www.microsoft.com/en-us/download/details.aspx?id=46681

Microsoft DaRT
Great for remotly viewing machines when in the PXE phase of OSD
https://technet.microsoft.com/en-us/windows/mdop.aspx

Microsoft DaRT Console Extension
Our buddy Nickolaj Andersen @NickolajA wrote this console extension.
http://www.scconfigmgr.com/2015/05/24/integrate-dart-remote-viewer-in-configmgr-2012-r2-console/

MDT Intergration with the SCCM Console
Johan Arwidmark @jarwidmark wrote this using Powershell to automate the integration with the SCCM console.
http://deploymentresearch.com/Research/Post/584/Quick-tip-PowerShell-script-to-integrate-MDT-with-ConfigMgr

What you could add

Log Launcher
This is a brilliant new tool created by our WMUG colleague Robert Marshall
https://gallery.technet.microsoft.com/LogLauncher-61ba5c99

Clean Software Update Groups console extension for ConfigMgr
This is another one by Nickolaj @NickolajA
https://gallery.technet.microsoft.com/Clean-Software-Update-5ae68ba2

Dell Warranty Tool 3.0 console extension for ConfigMgr
Nickolaj @NickolajA is just showing off now but this one shows the dell warranty status.
https://gallery.technet.microsoft.com/Dell-Warranty-Status-20-ae67cc13

Get BitLocker Recovery Password from ConfigMgr
This allows you to see the recovery key from AD
https://gallery.technet.microsoft.com/Get-BitLocker-Recovery-05d436ae

LAPS Extension for SCCM 2012 R2 +
LAPS is higly recommended for most enterprises see Maurice’s post about it
https://gallery.technet.microsoft.com/LAPS-Extension-for-SCCM-e8bd35b1

Script

This is using the Powershell Application Deployment Toolkit.

<#
.SYNOPSIS
	This script performs the installation or uninstallation of an application(s).
.DESCRIPTION
	The script is provided as a template to perform an install or uninstall of an application(s).
	The script either performs an "Install" deployment type or an "Uninstall" deployment type.
	The install deployment type is broken down into 3 main sections/phases: Pre-Install, Install, and Post-Install.
	The script dot-sources the AppDeployToolkitMain.ps1 script which contains the logic and functions required to install or uninstall an application.
.PARAMETER DeploymentType
	The type of deployment to perform. Default is: Install.
.PARAMETER DeployMode
	Specifies whether the installation should be run in Interactive, Silent, or NonInteractive mode. Default is: Interactive. Options: Interactive = Shows dialogs, Silent = No dialogs, NonInteractive = Very silent, i.e. no blocking apps. NonInteractive mode is automatically set if it is detected that the process is not user interactive.
.PARAMETER AllowRebootPassThru
	Allows the 3010 return code (requires restart) to be passed back to the parent process (e.g. SCCM) if detected from an installation. If 3010 is passed back to SCCM, a reboot prompt will be triggered.
.PARAMETER TerminalServerMode
	Changes to "user install mode" and back to "user execute mode" for installing/uninstalling applications for Remote Destkop Session Hosts/Citrix servers.
.PARAMETER DisableLogging
	Disables logging to file for the script. Default is: $false.
.EXAMPLE
	Deploy-Application.ps1
.EXAMPLE
	Deploy-Application.ps1 -DeployMode 'Silent'
.EXAMPLE
	Deploy-Application.ps1 -AllowRebootPassThru -AllowDefer
.EXAMPLE
	Deploy-Application.ps1 -DeploymentType Uninstall
.NOTES
	Toolkit Exit Code Ranges:
	60000 - 68999: Reserved for built-in exit codes in Deploy-Application.ps1, Deploy-Application.exe, and AppDeployToolkitMain.ps1
	69000 - 69999: Recommended for user customized exit codes in Deploy-Application.ps1
	70000 - 79999: Recommended for user customized exit codes in AppDeployToolkitExtensions.ps1
.LINK 
	
The Toolkit
#> [CmdletBinding()] Param ( [Parameter(Mandatory=$false)] [ValidateSet('Install','Uninstall')] [string]$DeploymentType = 'Install', [Parameter(Mandatory=$false)] [ValidateSet('Interactive','Silent','NonInteractive')] [string]$DeployMode = 'Interactive', [Parameter(Mandatory=$false)] [switch]$AllowRebootPassThru = $false, [Parameter(Mandatory=$false)] [switch]$TerminalServerMode = $false, [Parameter(Mandatory=$false)] [switch]$DisableLogging = $false ) Try { ## Set the script execution policy for this process Try { Set-ExecutionPolicy -ExecutionPolicy 'ByPass' -Scope 'Process' -Force -ErrorAction 'Stop' } Catch {} ##*=============================================== ##* VARIABLE DECLARATION ##*=============================================== ## Variables: Application [string]$appVendor = '' [string]$appName = 'System Center Configuration Manager Über Console' [string]$appVersion = '' [string]$appArch = '' [string]$appLang = 'EN' [string]$appRevision = '01' [string]$appScriptVersion = '1.0.0' [string]$appScriptDate = '' [string]$appScriptAuthor = '<author name>' ##*=============================================== ##* Do not modify section below #region DoNotModify ## Variables: Exit Code [int32]$mainExitCode = 0 ## Variables: Script [string]$deployAppScriptFriendlyName = 'Deploy Application' [version]$deployAppScriptVersion = [version]'3.6.5' [string]$deployAppScriptDate = '08/17/2015' [hashtable]$deployAppScriptParameters = $psBoundParameters ## Variables: Environment If (Test-Path -LiteralPath 'variable:HostInvocation') { $InvocationInfo = $HostInvocation } Else { $InvocationInfo = $MyInvocation } [string]$scriptDirectory = Split-Path -Path $InvocationInfo.MyCommand.Definition -Parent ## Dot source the required App Deploy Toolkit Functions Try { [string]$moduleAppDeployToolkitMain = "$scriptDirectory\AppDeployToolkit\AppDeployToolkitMain.ps1" If (-not (Test-Path -LiteralPath $moduleAppDeployToolkitMain -PathType 'Leaf')) { Throw "Module does not exist at the specified location [$moduleAppDeployToolkitMain]." } If ($DisableLogging) { . $moduleAppDeployToolkitMain -DisableLogging } Else { . $moduleAppDeployToolkitMain } } Catch { If ($mainExitCode -eq 0){ [int32]$mainExitCode = 60008 } Write-Error -Message "Module [$moduleAppDeployToolkitMain] failed to load: `n$($_.Exception.Message)`n `n$($_.InvocationInfo.PositionMessage)" -ErrorAction 'Continue' ## Exit the script, returning the exit code to SCCM If (Test-Path -LiteralPath 'variable:HostInvocation') { $script:ExitCode = $mainExitCode; Exit } Else { Exit $mainExitCode } } #endregion ##* Do not modify section above ##*=============================================== ##* END VARIABLE DECLARATION ##*=============================================== If ($deploymentType -ine 'Uninstall') { ##*=============================================== ##* PRE-INSTALLATION ##*=============================================== [string]$installPhase = 'Pre-Installation' ## Show Welcome Message, close Internet Explorer if required, allow up to 3 deferrals, verify there is enough disk space to complete the install, and persist the prompt Show-InstallationWelcome -CheckDiskSpace -PersistPrompt ## Show Progress Message (with the default message) Show-InstallationProgress ## <Perform Pre-Installation tasks here> ##*=============================================== ##* INSTALLATION ##*=============================================== [string]$installPhase = 'Installation' ## <Perform Installation tasks here> ## Install ConfigMgr Console Execute-Process -Path 'consolesetup' -Parameters '/q TargetDir="C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole" EnableSQM=1 DefaultSiteServerName=SMAP-COR03.londonmetuni.ac.uk' ## ConfigMgr Support Center Execute-MSI -Action 'Install' -Path 'cmsupportcenter.msi' ## Right Click Tools Execute-MSI -Action 'Install' -Path 'Recast_RCT_Latest.msi' ## ConfigMgr Tools Execute-MSI -Action 'Install' -Path 'ConfigMgrTools.msi' ## ConfigMgr Cmdlets Execute-MSI -Action 'Install' -Path 'ConfigMgr2012PowerShellCmdlets.msi' ## Microsoft Deployment Tool Kit Execute-MSI -Action 'Install' -Path 'MicrosoftDeploymentToolkit_x64.msi' # Integrate MDT with ConfigMgr $SiteServer = "SERVER" $SiteCode = "CM1" $MDTInstallDir = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Deployment 4' -Name Install_Dir).Install_Dir $CMConsoleInstallDir = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole" ##$CMConsoleInstallDir = $env:SMS_ADMIN_UI_PATH.Substring(0,$env:SMS_ADMIN_UI_PATH.Length – 9) This doesn't work as $env:SMS_ADMIN_UI_PATH wont show up till the machine restarts $MOF = "$CMConsoleInstallDir\Bin\Microsoft.BDD.CM12Actions.mof" Copy-Item "$MDTInstallDir\Bin\Microsoft.BDD.CM12Actions.dll" "$CMConsoleInstallDir\Bin\Microsoft.BDD.CM12Actions.dll" Copy-Item "$MDTInstallDir\Bin\Microsoft.BDD.Workbench.dll" "$CMConsoleInstallDir\Bin\Microsoft.BDD.Workbench.dll" Copy-Item "$MDTInstallDir\Bin\Microsoft.BDD.ConfigManager.dll" "$CMConsoleInstallDir\Bin\Microsoft.BDD.ConfigManager.dll" Copy-Item "$MDTInstallDir\Bin\Microsoft.BDD.CM12Wizards.dll" "$CMConsoleInstallDir\Bin\Microsoft.BDD.CM12Wizards.dll" Copy-Item "$MDTInstallDir\Bin\Microsoft.BDD.PSSnapIn.dll" "$CMConsoleInstallDir\Bin\Microsoft.BDD.PSSnapIn.dll" Copy-Item "$MDTInstallDir\Bin\Microsoft.BDD.Core.dll" "$CMConsoleInstallDir\Bin\Microsoft.BDD.Core.dll" Copy-Item "$MDTInstallDir\SCCM\Microsoft.BDD.CM12Actions.mof" $MOF Copy-Item "$MDTInstallDir\Templates\CM12Extensions\*" "$CMConsoleInstallDir\XmlStorage\Extensions\" -Force -Recurse (Get-Content $MOF).Replace('%SMSSERVER%', $SiteServer).Replace('%SMSSITECODE%', $SiteCode) | Set-Content $MOF | Out-Null & "C:\Windows\System32\wbem\mofcomp.exe" "$CMConsoleInstallDir\Bin\Microsoft.BDD.CM12Actions.mof" | Out-Null ## Microsoft DART 10 Execute-MSI -Action 'Install' -Path 'MSDaRT100.msi' ## Intergate DART into the ConfigMgr Console Copy-Item "$dirFiles\DaRT.xml" -Destination “C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\3fd01cd1-9e01-461e-92cd-94866b8d1f39” -Force Copy-Item "$dirFiles\DaRT.xml" -Destination “C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\XmlStorage\Extensions\Actions\ed9dee86-eadd-4ac8-82a1-7234a4646e62” -Force Copy-Item "$dirFiles\Start-DaRTRemoteViewer.ps1" -Destination (New-Item "C:\Scripts" -Type container -Force) -Force ## Handle Zero-Config MSI Installations If ($useDefaultMsi) { [hashtable]$ExecuteDefaultMSISplat = @{ Action = 'Install'; Path = $defaultMsiFile }; If ($defaultMstFile) { $ExecuteDefaultMSISplat.Add('Transform', $defaultMstFile) } Execute-MSI @ExecuteDefaultMSISplat; If ($defaultMspFiles) { $defaultMspFiles | ForEach-Object { Execute-MSI -Action 'Patch' -Path $_ } } } ##*=============================================== ##* POST-INSTALLATION ##*=============================================== [string]$installPhase = 'Post-Installation' ## <Perform Post-Installation tasks here> ## Display a message at the end of the install If (-not $useDefaultMsi) { Show-InstallationPrompt -Message 'You can customize text to appear at the end of an install or remove it completely for unattended installations.' -ButtonRightText 'OK' -Icon Information -NoWait } } ElseIf ($deploymentType -ieq 'Uninstall') { ##*=============================================== ##* PRE-UNINSTALLATION ##*=============================================== [string]$installPhase = 'Pre-Uninstallation' ## Show Welcome Message, close Internet Explorer with a 60 second countdown before automatically closing Show-InstallationWelcome -CloseApps 'iexplore' -CloseAppsCountdown 60 ## Show Progress Message (with the default message) Show-InstallationProgress ## <Perform Pre-Uninstallation tasks here> ##*=============================================== ##* UNINSTALLATION ##*=============================================== [string]$installPhase = 'Uninstallation' Execute-Process -Path 'consolesetup' -Parameters "/q /uninstall" Execute-MSI -Action 'Uninstall' -Path 'cmsupportcenter.msi' Execute-MSI -Action 'Uninstall' -Path 'Recast_RCT_Latest.msi' Execute-MSI -Action 'Uninstall' -Path 'ConfigMgrTools.msi' Execute-MSI -Action 'Uninstall' -Path 'ConfigMgr2012PowerShellCmdlets.msi' Execute-MSI -Action 'Uninstall' -Path 'MicrosoftDeploymentToolkit_x64.msi' Execute-MSI -Action 'Uninstall' -Path 'MSDaRT100.msi' $CMConsoleInstallDir = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole" Remove-File -Path "$CMConsoleInstallDir\Bin\Microsoft.BDD.CM12Actions.dll" Remove-File -Path "$CMConsoleInstallDir\Bin\Microsoft.BDD.Workbench.dll" Remove-File -Path "$CMConsoleInstallDir\Bin\Microsoft.BDD.ConfigManager.dll" Remove-File -Path "$CMConsoleInstallDir\Bin\Microsoft.BDD.CM12Wizards.dll" Remove-File -Path "$CMConsoleInstallDir\Bin\Microsoft.BDD.PSSnapIn.dll" Remove-File -Path "$CMConsoleInstallDir\Bin\Microsoft.BDD.Core.dll" Remove-File -Path "$CMConsoleInstallDir\Bin\Microsoft.BDD.CM12Actions.mof" ## Handle Zero-Config MSI Uninstallations If ($useDefaultMsi) { [hashtable]$ExecuteDefaultMSISplat = @{ Action = 'Uninstall'; Path = $defaultMsiFile }; If ($defaultMstFile) { $ExecuteDefaultMSISplat.Add('Transform', $defaultMstFile) } Execute-MSI @ExecuteDefaultMSISplat } # <Perform Uninstallation tasks here> ##*=============================================== ##* POST-UNINSTALLATION ##*=============================================== [string]$installPhase = 'Post-Uninstallation' ## <Perform Post-Uninstallation tasks here> } ##*=============================================== ##* END SCRIPT BODY ##*=============================================== ## Call the Exit-Script function to perform final cleanup operations Exit-Script -ExitCode $mainExitCode } Catch { [int32]$mainExitCode = 60001 [string]$mainErrorMessage = "$(Resolve-Error)" Write-Log -Message $mainErrorMessage -Severity 3 -Source $deployAppScriptFriendlyName Show-DialogBox -Text $mainErrorMessage -Icon 'Stop' Exit-Script -ExitCode $mainExitCode }

Creating the Deployment

You can add detection methods for the MSI’s

I added Microsoft Windows Assessment and Deployment Kit as a dependency as its needed for MDT but is also deployed separately so is not included in the package.

Deployed

Users get a nice progress bar so they can see whats happening, it can also be branded with your company logo/colours etc

 

(5037)

An Irish man living in London, after completing a BSc in Computer Science in 2005 he started working in the IT Industry. Currently Senior Systems Officer at London Metropolitan University managing Azure and several thousand endpoints across several campuses in London.

Technology focuses include SCCM, MDT, Azure, Office 365, Active Directory, Group Policy, Application Packaging, PowerShell, Virtualization and Automation.

comments
  • Shelby Price
    Posted at 16:00 January 6, 2017
    Shelby Price
    Reply
    Author

    Awesome post. If nothing else, it’s a good look at different extensions. I didn’t even know about the LAPS extension. Put that sucker in immediately. In case this post serves as a curation of SCCM extensions, you might consider adding the SCCM Servicing Extension.

    https://www.microsoft.com/en-us/download/details.aspx?id=45033

    • Terence Beggs
      Posted at 09:20 January 9, 2017
      Terence Beggs
      Reply
      Author

      Hello Shelby, i thought that extension was replaced by the update and servicing node, i think it only works for Windows 7 and 2008 R.
      Thanks

  • Jason Sandys
    Posted at 20:04 January 6, 2017
    Jason Sandys
    Reply
    Author

    Nice post. No need to do the PowerShell cmdlets though if doing ConfigMgr CB — they’ve unified the releases again so you’ll always get the latest with the latest CB version.

    • Terence Beggs
      Posted at 00:24 January 8, 2017
      Terence Beggs
      Reply
      Author

      Thanks Jason forgot about that. Will update the post.

  • Leave a Reply