PowerShell script function file download, unblock and install with multiple parameters and return installed version

Here’s a PowerShell script that defines a function to download a file, unblock it, install it, and return the installed version. The function accepts multiple parameters for flexibility.
function Install-Software {
param (
[Parameter(Mandatory = $true)]
[string]$DownloadUrl,
[Parameter(Mandatory = $true)]
[string]$DestinationPath,
[Parameter(Mandatory = $true)]
[string]$InstallerArguments,
[Parameter(Mandatory = $true)]
[string]$VersionCommand
)
try {
# Step 1: Download the file
Write-Host "Downloading file from $DownloadUrl to $DestinationPath..."
Invoke-WebRequest -Uri $DownloadUrl -OutFile $DestinationPath -ErrorAction Stop
# Step 2: Unblock the file
Write-Host "Unblocking the downloaded file..."
Unblock-File -Path $DestinationPath
# Step 3: Install the software
Write-Host "Installing the software..."
Start-Process -FilePath $DestinationPath -ArgumentList $InstallerArguments -Wait -NoNewWindow
# Step 4: Retrieve the installed version
Write-Host "Retrieving the installed version..."
$InstalledVersion = Invoke-Expression $VersionCommand
Write-Host "Installation completed successfully. Installed version: $InstalledVersion"
return $InstalledVersion
}
catch {
Write-Error "An error occurred: $_"
return $null
}
}
# Example usage:
# Replace the parameters below with actual values for your use case.
$DownloadUrl = "https://example.com/software-installer.exe"
$DestinationPath = "C:\Temp\software-installer.exe"
$InstallerArguments = "/quiet /norestart"
$VersionCommand = "software --version" # Replace with the actual command to check the version
$InstalledVersion = Install-Software -DownloadUrl $DownloadUrl -DestinationPath $DestinationPath -InstallerArguments $InstallerArguments -VersionCommand $VersionCommand
if ($InstalledVersion) {
Write-Host "Successfully installed version: $InstalledVersion"
} else {
Write-Host "Installation failed."
}
Explanation:
- Parameters:
DownloadUrl: URL of the file to download.DestinationPath: Path where the file will be saved.InstallerArguments: Arguments for the installer (e.g., silent installation).VersionCommand: Command to retrieve the installed version.
- Steps:
- Downloads the file using
Invoke-WebRequest. - Unblocks the file using
Unblock-File. - Installs the software using
Start-Process. - Retrieves the installed version using the provided command.
- Downloads the file using
- Error Handling:
- Catches any errors during the process and logs them.
This script is modular and can be adapted for various software installations.