2 min read

Create 7 ZIP Application using PowerShell

Create 7 ZIP Application using PowerShell

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

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):\"
Import Configuration Manager PowerShell Module

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 
Invoke-WebRequest

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"
Get-Item

Create the application using the New-CMApplication command let.

#STEP 3 - Create the Application
    $AppProperties = @{
        Name = $ApplicationName;
        SoftwareVersion = $Version
    }

New-CMApplication @AppProperties
New-CMApplication

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
New-CMDetectionClauseDirectory and New-CMDetectionClauseFile

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
Add-CMScriptDeploymentType

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
Start-CMContentDistribution

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
New-CMCollection and New-CMApplicationDeployment

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.

Need help with automation, then let me know :)

You can download the full copy from here - Configuration-Manager/Create-7ZIPApplication.ps1 at master · Kaidja/Configuration-Manager (github.com)