Introduction
I have been presenting and building automated solutions for Configuration Manager for many years. If you are a Configuration Manager administrator, automating your day-to-day activities is super important. Most of the activities we need to carry out each day are the same daily and weekly basis. As a Configuration Manager administrator, I need to save time, and then I can focus on other important tasks such as Client Health, Compliance, etc.
The good thing about Configuration Manager is that we have a built-in PowerShell module and can automate anything. In this post, I will show you how you can create a 7-ZIP Application using the Configuration Manager PowerShell module
Requirements
- Configuration Manager Admin Console
- Permissions to create Application / Packages
How to Create a 7-ZIP Application
On your Primary Site server or your machine where the console is installed, execute the following commands to import the module.
#STEP 0 - Import the Module
Import-Module $env:SMS_ADMIN_UI_PATH.Replace("\bin\i386","\bin\configurationmanager.psd1")
$SiteCode = Get-PSDrive -PSProvider CMSITE
Set-Location "$($SiteCode.Name):\"
Unlock Seamless Hybrid-Cloud Management with Azure Automation: Enhance efficiency, security, and control in your IT environment
In our next step, we are going to download the 7-ZIP version 22.01 using the Invoke-WebRequest command and save it under our source folder
#STEP 1 - Download the content
$7ZIPURL = 'https://www.7-zip.org/a/7z2201-x64.exe'
$SourceFolder = 'F:\Sources\Software\7-ZIP\22.01\X64\EXE\7z2201-x64.exe'
Invoke-WebRequest -Uri $7ZIPURL -OutFile $SourceFolder
Now that we have the source files, we can read out the version info using the Get-Item command and prepare additional variables for the application creation.
#STEP 2 - Get the file information
$FileInfo = Get-Item -Path $SourceFolder
$Version = $FileInfo.VersionInfo.ProductVersion
$FileName = $FileInfo.BaseName
#Define additional variables for 7-ZIP Application
$ApplicationName = '7-ZIP'
$CommandLine = "$($FileInfo.Name) /S"
$DeploymentTypeName = "Install - $FileName"
$ContentLocation = '\\cm01\sources\Software\7-ZIP\22.01\X64\EXE'
$DistributionPointGroupName = 'All Content'
$InstallCollectionName = "SWD - $ApplicationName - $Version"
$LimitingCollectionName = 'All Systems'
$SoftwareAPPRootFolder = "$($SiteCode.Name):\DeviceCollection\Software"
Create the application using the New-CMApplication command let.
#STEP 3 - Create the Application
$AppProperties = @{
Name = $ApplicationName;
SoftwareVersion = $Version
}
New-CMApplication @AppProperties
Before we move on with the Deployment Types, we need to create detection methods. You can create the deployment methods using the New-CMDetectionClauseDirectory and New-CMDetectionClauseFile commands. These are just examples for you.
#STEP 4 - Create the Detection Methods
$7ZIPFolderProperties = @{
DirectoryName = '7-Zip';
Path = 'C:\Program Files\';
Is64Bit = $True;
Existence = $True
}
$7ZIPFileProperties = @{
FileName = '7zFM.exe';
Path = 'C:\Program Files\7-Zip';
Is64Bit = $True;
PropertyType = 'Version';
ExpectedValue = $Version;
ExpressionOperator = 'IsEquals'
Value = $True
}
$7ZIPFolder = New-CMDetectionClauseDirectory @7ZIPFolderProperties
$7ZIPFile = New-CMDetectionClauseFile @7ZIPFileProperties
So now that we have the application object and detection methods, we can create the Deployment Type.
#STEP 5 - Create the Deployment Type with detection methods
$DeploymentTypeProperties = @{
InstallCommand = $CommandLine
DeploymentTypeName = $DeploymentTypeName
ApplicationName = $ApplicationName
ContentLocation = $ContentLocation
AddDetectionClause = $7ZIPFolder,$7ZIPFile
}
Add-CMScriptDeploymentType @DeploymentTypeProperties
To distribute the content to the Distribution Point Groups, use the Start-CMContentDistribution command.
#STEP 6 - Distribute the Content
$ContentProperties = @{
ApplicationName = $ApplicationName
DistributionPointGroupName = $DistributionPointGroupName
}
Start-CMContentDistribution @ContentProperties
Finally, we can create the collections and deployments.
#STEP 7 - Create the Collection
$CollectionProperties = @{
Name = $InstallCollectionName;
LimitingCollectionName = $LimitingCollectionName;
CollectionType = 'Device'
}
New-CMCollection @CollectionProperties | Move-CMObject -FolderPath $SoftwareAPPRootFolder
#STEP 8 - Create the Deployment
$DeploymentProperties = @{
Name = $ApplicationName;
DeployAction = 'Install';
DeployPurpose = 'Required';
CollectionName = $InstallCollectionName
}
New-CMApplicationDeployment @DeploymentProperties
Summary
As you see from this example, we can build end-to-end automated solutions. We can save a lot of time. We need to take the time and invest in it.
You can download the full copy from here – Configuration-Manager/Create-7ZIPApplication.ps1 at master · Kaidja/Configuration-Manager (github.com)