Skip to content

rprokhorov/SCCM-Software-Check

Repository files navigation

This project is designed to easily manage applications in SCCM. The main goal of this project is to get a flexible installation configuration for your company. Because in real life a silent install is more complicated than "/qn".

List of products and their readiness

Icon Product Name Web parser Config file (Install/Uninstall)
1 1C Not necessary* Ready
2 7-zip Ready Ready
3 Abbyy FineReader Not necessary* Ready
4 Abbyy Lingvo Not necessary* In progress
5 Acronis Backup Agent Not necessary* Ready
6 Adobe Acrobat 9 Pro Not necessary* Ready
7 Adobe Acrobat Reader 2015 Classic Not necessary* In progress
8 Adobe Acrobat Reader 2017 Classic In progress In progress
9 Adobe Acrobat Reader DC In progress Ready
10 Anaconda In progress Ready
11 AxurePR Ready Ready
12 Business Studio In progress Ready
13 Camtasia 8 In progress Ready
13 Camtasia 9 In progress Ready
14 Caramba Switcher In progress Ready
15 Check Point Endpoint Security Not necessary* In progress
16 DameWare Mini Remote Control Not necessary** In progress
17 DataGrip In progress Ready
18 DaVinchi Resolve In progress Ready
19 Dropbox In progress In progress
20 DWG TrueView In progress Ready
21 Far Manager Ready Ready
22 Fiddler Ready Ready
23 FileZilla Client Ready Ready
24 Foxit Reader In progress In progress
25 FreeCommander In progress Ready
26 Gimp In progress Ready
27 Git Ready Ready
28 Git Extensions Ready Ready
29 Google Chrome In progress Ready
30 Gpg4win In progress In progress
31 Greenshot In progress Ready
32 InfoWatch Not necessary* In progress
33 Kaspersky agent Not necessary* In progress
34 KDiff3 In progress In progress
35 KeePass Ready Ready
36 K-Lite Ready Ready
37 kubectl In progress Ready
38 Local Administrator Password Solution Not necessary* Ready
39 Logitech Options In progress Ready
40 Message Analyzer Not necessary* Ready
41 Microsoft Azure Information Protection In progress Ready
42 Microsoft Edge In progress Ready
43 Microsoft Power BI Desktop In progress Ready
44 Microsoft SQL Server Management Studio Ready Ready
45 Microsoft Teams In progress In progress
46 Microsoft Visual C++ 2015-2019 Redistributable Not necessary* In progress
47 Microsoft Visual C++ 2015-2022 Redistributable Not necessary* In progress
48 Microsoft Visual Studio Code Ready Ready
49 Mozilla Firefox ESR Ready Ready
50 mRemoteNG Ready Ready
51 Nmap Ready Ready
52 Notepad++ Ready Ready
53 OBS Studio In progress In progress
54 One Identity Manager Not necessary* Ready
55 Oracle Java 7 In progress Ready
56 Oracle Java SE Development Kit In progress Ready
57 Oracle SQL Developer Not necessary* Ready
58 Orca Not necessary* Ready
59 Paint.NET In progress Ready
60 PDF24 Creator In progress Ready
61 pgAdmin In progress Ready
62 PHP Storm In progress Ready
63 Postman Ready Ready
64 PuntoSwitcher In progress Ready
65 PuTTY Ready Ready
66 PyCharm In progress Ready
66 PyCharm In progress Ready
67 Python 3 In progress Ready
68 Remote Desktop Connection Manager (RDCMan) Ready Ready
69 Remote Server Administration Tools (RSAT) Not necessary* In progress
70 RD Tabs Ready In progress
71 SAS Enterprise Guide Not necessary* Ready
72 SBIS Plugin Not necessary* Ready
73 SCCM Console Not necessary* Ready
74 Secret Net Studio Not necessary* Ready
75 Snagit Not necessary* In progress
76 SoapUI In progress Ready
77 Strategy Design Studio Not necessary* Ready
78 Sublime Merge In progress In progress
79 Symantec Endpoint Protection Not necessary* In progress
80 Tableau Desktop In progress Ready
81 Taxcom Plugin Not necessary* Ready
82 TeamViewer Host In progress Ready
83 think-cell Not necessary* In progress
84 TortoiseGit In progress In progress
85 TortoiseSVN In progress In progress
86 Total Commander Ready Ready
87 TreeSize Free In progress Ready
88 Visio Viewer Not necessary* Ready
89 VLC Ready Ready
90 VMware Horizon Client Not necessary* Ready
91 VMware Tools Not necessary* Ready
92 WebEx In progress Ready
93 WinDjView In progress In progress
94 WinMerge In progress Ready
95 WinRAR Ready Ready
96 WinSCP Ready Ready
97 Wireshark Ready Ready
98 XMind In progress Ready
99 XnView In progress Ready
100 Yandex Browser In progress Ready
101 Zabbix agent In progress Ready
102 Галактика Not necessary* In progress
103 КОМПАС-3D Viewer In progress Ready
104 Континент АП Not necessary* Ready
  • No need* - I think that it makes no sense to try to write site parsers, provided that this software is updated only after approval by software administrators.
  • in progress - it is worth writing and publishing either a config or a site parser

REST API

If you do not want to run scripts for parsing sites on your site, but only want to receive data about applications, then I started making a REST service https://sccm-software-check.azurewebsites.net/api/application

REST parameters

Parameter Name Value Description
name 7zip, AxurePR, FarManager, Fiddler, FileZilla, Git, GitExtensions, KLiteStandard, KeePass, MozillaFirefoxESR, mRemoteNG, Nmap, Notepadplusplus, Postman, PuTTY, RDCMan, RDTabs, SQLManagementStudio, TotalCommander, VLC, VisualStudioCode, WinRAR, WinSCP, Wireshark Application name
version 1.2.4 (specific application version), check Shows information about a specific version of the application. If check is selected - checks the live version

REST request examples

  • Request the latest version of the application

https://sccm-software-check.azurewebsites.net/api/application?name=VisualStudioCode

{
  "TimeStamp": "2022-08-21 01:59:23",
  "Product": "Visual Studio Code",
  "Version": "1.70.1",
  "Searchlink": "https://code.visualstudio.com/updates",
  "Download_link_x86": "https://vscode-update.azurewebsites.net/latest/win32/stable",
  "Download_link_x64": "https://vscode-update.azurewebsites.net/latest/win32-x64/stable",
  "icon": "https://raw.githubusercontent.com/rprokhorov/SCCM-Software-Check/master/Applications/Visual%20Studio%20Code/icon.png",
  "LocalizedDescription": {
    "ru": "Visual Studio Code - Редактор кода. Включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense и средства для рефакторинга. Имеет широкие возможности для кастомизации: пользовательские темы, сочетания клавиш и файлы конфигурации.",
    "en": "Visual Studio Code - editor redefined and optimized for building and debugging modern web and cloud applications"
  },
  "Publisher": "Microsoft"
}
  • Requesting a specific application version

https://sccm-software-check.azurewebsites.net/api/application?name=VisualStudioCode&version=1.69

{
  "TimeStamp": "2022-07-07 08:00:27",
  "Product": "Visual Studio Code",
  "Version": "1.69",
  "Searchlink": "https://code.visualstudio.com/updates",
  "Download_link_x86": "https://vscode-update.azurewebsites.net/latest/win32/stable",
  "Download_link_x64": "https://vscode-update.azurewebsites.net/latest/win32-x64/stable",
  "icon": "https://raw.githubusercontent.com/rprokhorov/SCCM-Software-Check/master/Applications/Visual%20Studio%20Code/icon.png",
  "LocalizedDescription": {
    "ru": "Visual Studio Code - Редактор кода. Включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense и средства для рефакторинга. Имеет широкие возможности для кастомизации: пользовательские темы, сочетания клавиш и файлы конфигурации.",
    "en": "Visual Studio Code - editor redefined and optimized for building and debugging modern web and cloud applications"
  },
  "Publisher": "Microsoft"
}
  • Requesting latest version from website

https://sccm-software-check.azurewebsites.net/api/application?name=VisualStudioCode&version=check

{
  "TimeStamp": "2023-04-04 10:08:18",
  "Product": "Visual Studio Code",
  "Version": "1.77",
  "Searchlink": "https://code.visualstudio.com/updates",
  "Download_link_x86": "https://vscode-update.azurewebsites.net/latest/win32/stable",
  "Download_link_x64": "https://vscode-update.azurewebsites.net/latest/win32-x64/stable",
  "icon": "https://raw.githubusercontent.com/rprokhorov/SCCM-Software-Check/master/Applications/Visual%20Studio%20Code/icon.png",
  "LocalizedDescription": {
    "ru": "Visual Studio Code - Редактор кода. Включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense и средства для рефакторинга. Имеет широкие возможности для кастомизации: пользовательские темы, сочетания клавиш и файлы конфигурации.",
    "en": "Visual Studio Code - editor redefined and optimized for building and debugging modern web and cloud applications"
  },
  "Publisher": "Microsoft"
}

Folder structure

  • Applications - the folder contains application icons and some custom settings or transformation files for applications. For example, for VLC, you need to apply a transformation file for "quiet first launch of the application."
  • Software Check - the folder contains scripts that parse sites, get the latest version of the application, download links. and if your file share does not have this version, then it downloads it. Then it starts creating the application in SCCM.
  • Template - the folder contains fork PSADT, which was redesigned to work with configuration files + minor cosmetic improvements.

Installation

  1. Copy repository
  2. Edit file Config.json in folder SoftwareCheck for work in your's infrastructure
{
    "to":"LikePatchMyPC@rprokhorov.ru",
    "From":"SCCM_service@rprokhorov.ru",
    "MailServer":"mail.rprokhorov.ru",
    "LocalDistribPath":"D:\\Sources\\Applications\\",
    "DistribPath":"\\\\SCCMandSQL\\Sources\\Applications\\",
    "ProxyURL" : "http://ProxyServer.contoso.com:8080",
    "PSADTTemplatePath" : "\\SCCMandSQL.rprokhorov.local\\Sources\\Applications\\_PSADT Template\\%AppName% %Version%\\*",
    "ProviderMachineName" : "SCCMandSQL",
    "SiteCode":"PRV"
}
  1. Run script All.ps1 or add it to run from Task Scheduler

Content folder structure

What I got using this approach in my work (for obvious reasons, I can only take screenshots from the test environment, but this does not change anything):

alt text

  • Red - content folder. DistribPath in Config.json
  • Green - folder named as application.
  • Blue - a version of the product that will be understood by a person. For example, the "SQL Server Management Studio" application, when launched and downloaded, says that it has a version of "18.4", but when installed on the system, it will have a version of "15.0.18206.0". In this case, for ease of use, the folder is created with version 18.4, and the version "15.0.18206.0" will be used in the DetectionMethod file itself.
  • Purple - folder with downloaded files.
  • Yellow - example of downloaded files.

Structure of applications and folders in SCCM

alt text

  • Red - the name of the application root folder of the application. I prefer to make the list as narrow as possible, since in this case any new employee should not have any secret advantages, but simply have to look through the list and find the right one.
  • Blue - folder with archive versions of applications. I prefer not to delete old applications, but simply move them to a separate folder. There may also be stored applications that relate to this product and inherited, and for some reason are no longer used. In that case, I'd rather save the app too.
  • Green - приложения, которые используются в данный момент в продакшене. В определённый момент тут будут находиться 2 версии приложений v1 и v2, пока не произошёл переход с одной версии на другую.

Template

alt text

It based on PSADT project (https://psappdeploytoolkit.com)

I made the following changes:

  • Red - folder that contains all sample Config files.
  • Blue - Config.ps1 file, which will be executed to install and uninstall applications.
  • Green - DetectionMethod.ps1 file, which will be executed as Detection Method in the SCCM application.
  • White - original PSADT files
  • Yellow - parts of the template that I changed.

Config.ps1 file

This file is used to describe the installation/post-installation and uninstallation steps of the application. The file has the format of a hash table in PowerShell (I did not find another normal option to store a separate ScriptBlock).

Example Config.ps1 file:

$Config = @{
    appVendor = "Mozilla"
    appName = "Mozilla Firefox ESR"
    appVersion = "68.3.0"
    appDetectionVersion = "68.3.0"
    appDetectionName = "Mozilla Firefox*ESR"
    appScriptDate = get-date -Format "yyyy/MM/dd"
    appScriptAuthor = "RProhkorov"
    close_app = "firefox"
    InstallScriptBlock = {
        [string]$installPhase = 'Installation'
        Show-InstallationProgress -StatusMessage "Install application $appName `nStep [1/2] install new version of software..."
        # Install block
        if ($Is64Bit)
        {
            $mainExitCode = Execute-Process -Path "$dirFiles\FirefoxESR_x64.exe" -Parameters "/s /INI=$dirFiles\Firefox.ini"
        }
        else
        {
            $mainExitCode = Execute-Process -Path "$dirFiles\FirefoxESR_x86.exe" -Parameters "/s /INI=$dirFiles\Firefox.ini"
        }
        Show-InstallationProgress -StatusMessage "Install application $appName `nStep [2/2] copy policy files..."
		[string]$installPhase = 'Post-Installation'
        $FireFox_Folder = 'C:\Program Files\Mozilla Firefox'
        if(!(Test-Path -Path "$FireFox_Folder\distribution"))
        {
            New-Folder -Path "$FireFox_Folder\distribution"
        }
        Copy-File -Path "$dirSupportFiles\policies.json" -Destination "$FireFox_Folder\distribution\policies.json" -ContinueOnError $false 
    }
    UninstallScriptBlock = {
        [string]$installPhase = 'Uninstall'
        Stop-Process -Name 'Firefox' -Force
		$mainExitCode = Execute-Process -Path "C:\Program Files\Mozilla Firefox\uninstall\helper.exe" -Parameters "/s"
    }
}
  • appVendor - application author (Mozilla)
  • appName - the name of the application in SCCM, and in the installation window if it will show the installation process.
  • appVersion - the version of the application that is human-readable. See the example above with SQL Management Studio.
  • appDetectionVersion - application version to be used when executing DetectionMethod.ps1
  • appDetectionName - the name of the application that will be used to find it on the computer. For example, appName = "Adobe Flash Player ActiveX", while on the computer the application will be searched for by the mask appDetectionName = "Adobe Flash Player*ActiveX"
  • appScriptDate - variable to understand when this config file was created. Not used anywhere.
  • appScriptAuthor - config author.
  • close_app - applications that must be closed before the installation of the application can begin. If the application is running on the computer and interferes with the installation, the user will be shown a window asking them to close the application or postpone the installation.
  • InstallScriptBlock - a block that describes how the application will be installed. You can and should use PSADT functions in a block.
  • UninstallScriptBlock - the block to be executed when the app uninstall is triggered

DetectionMethod.ps1 file

The file is used as the Detection method when creating an Application in SCCM. File description:

function write-log{
    ...
}

Function Get-InstalledApplication {
...
}

## Load config file
#. "$(Split-Path $script:MyInvocation.MyCommand.Path)\SupportFiles\Config.ps1"
##*===============================================
$appName = "Mozilla Firefox ESR"
$appVersion = "68.4.1"
$appDetectionVersion = "68.4.1"
$appDetectionName = "Mozilla Firefox*ESR"
$LogName = "Detection Method $appName - $appVersion.log" -replace '\*', ' '
$Version = "$appDetectionVersion"
#Detection block
[array]$Products = Get-InstalledApplication -Name "*$appDetectionName*" -WildCard -LogName $LogName

$counter=0
foreach ($product in $Products)
{ 
	if ($product.DisplayVersion -ge $Version)
	{
		Write-Log -Message "Application $($product.DisplayName) [$($product.DisplayVersion)] has version greater or equal $Version" -MessageType Info -Component Main -LogFileName $LogName
		$counter++
	}
	else 
	{
		Write-Log -Message "Application $($product.DisplayName) [$($product.DisplayVersion)] has not version greater or equal $Version" -MessageType Error -Component Main -LogFileName $LogName
	}
}
if ($counter -eq $products.Count -and $counter -ne 0)
{
	Write-Host "Software was found"
}
else {
}
Write-Log -Message "Detection method was finished" -MessageType Info -Component Main -LogFileName $LogName
  • function write-log - function for writing logs in cmtrace format.
  • function Get-InstalledApplication - a function from PSADT that returns an array of applications, since multiple applications can be found on the computer.
  • appName - the name of the application
  • appVersion - the version of the application that is human-readable. See the example above with SQL Management Studio.
  • appDetectionVersion - application version to be used when executing DetectionMethod.ps1
  • appDetectionName - the name of the application that will be used to find it on the computer. For example, appName = "Adobe Flash Player ActiveX", while on the computer the application will be searched for by the mask appDetectionName = "Adobe Flash Player*ActiveX"
  • $LogName - the path where the log will be stored
  • #Detection block - a description of how your applications will be searched. In a specific case, a search is made for all applications by mask, and if at least one is lower than the version we are looking for, then it will be considered that the application was not found. In the future, this will help to clean up the infrastructure from old artifacts.

About

This project is designed to easily manage applications in SCCM.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages