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".
№ | 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
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
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 |
- 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"
}
- 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.
- Copy repository
- 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"
}
- Run script All.ps1 or add it to run from Task Scheduler
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):
- 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.
- 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, пока не произошёл переход с одной версии на другую.
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.
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
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.