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.
https://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.
https://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.
https://msendpointmgr.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.
https://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 https://psappdeploytoolkit.com #> [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
[…] Terence Beggs created a console setup with PSADK wich installed the SCCM console and a few cool tools on top within 1 script. I like it so much that i directly integrated it into my demo environment. Check it out. […]
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.
Thanks Jason forgot about that. Will update the post.
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
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