JMP.
Automating Software Deployments with PowerShell

Automating Software Deployments with PowerShell

#powershell #automation #it-ops

Automating Software Deployments with PowerShell

As a Client Engineer, one of the most time-consuming tasks is deploying software across dozens or hundreds of machines. PowerShell makes this process fast, repeatable, and error-free.

Why Automate?

Manual software deployments are prone to human error, inconsistency, and eat up valuable engineering time. With a good PowerShell script, you can deploy to hundreds of endpoints in minutes — and have a reliable log of what happened.

A Basic Silent Install Wrapper

Here is a simple function that wraps any installer with error handling and logging:

function Install-Software {
    param(
        [string]$InstallerPath,
        [string]$Arguments = "/quiet /norestart",
        [string]$LogPath = "C:\Logs\install.log"
    )

    if (-not (Test-Path $InstallerPath)) {
        Write-Error "Installer not found: $InstallerPath"
        return $false
    }

    $process = Start-Process -FilePath $InstallerPath -ArgumentList $Arguments -Wait -PassThru
    Add-Content -Path $LogPath -Value "$(Get-Date) | Exit: $($process.ExitCode) | $InstallerPath"

    return $process.ExitCode -eq 0
}

Deploying to Remote Machines

With Invoke-Command, you can push installations to multiple machines in parallel:

$computers = Get-Content "C:\Scripts\target-machines.txt"

Invoke-Command -ComputerName $computers -ScriptBlock {
    param($source)
    Start-Process $source "/quiet /norestart" -Wait
} -ArgumentList "\\fileserver\share\installer.exe"

Checking Installation Success

Always verify the result. One reliable approach is querying the registry or using Get-Package:

$app = Get-Package -Name "MyApplication" -ErrorAction SilentlyContinue
if ($app) {
    Write-Output "Installed: $($app.Version)"
} else {
    Write-Warning "Installation verification failed"
}

Tips from the Field

  • Always run scripts in a test environment before production
  • Use -WhatIf on destructive operations
  • Store installer files on a reliable network share
  • Log everything — timestamps, exit codes, machine names
  • Schedule deployments during maintenance windows

Conclusion

PowerShell automation turns a 3-hour manual task into a 5-minute script run. The investment in writing robust scripts pays dividends every time you run them. Start small, log everything, and build up your library of reusable functions over time.