Dependencies/MinorVersionSetSameStatus.ps1

<#
    .NOTES
    ===========================================================================
    Created with: Visual Studio Code
    Created on: 2024-01-30
    Created by: Mark5900
    Organization:
    Filename: MinorVersionSetSameStatus.ps1
    ===========================================================================
    .DESCRIPTION
        Sets the status of all units that have the old package installed to have the same status on the new package.
#>

##################
### PARAMETERS ###
##################
# DO NOT CHANGE
$SettingsPath = Join-Path $PSScriptRoot 'Settings.json'
$Settings = Get-Content $SettingsPath | ConvertFrom-Json

$PackageName = ("$($Settings.SoftwareName) $($Settings.SoftwareVersion)").Trim()
$NewPackageVersion = "p$($Settings.PackageVersion)"
$OldPackageVersion = "p$($Settings.OldPackageVersion)"
# Change as needed

##############
### SCRIPT ###
##############
try {
    $oCMS = Initialize-CapaSDK -Server $Settings.CapaServer -Database $Settings.Database
    $ManagementPoints = Get-CapaManagementPoint -CapaSDK $oCMS

    foreach ($Point in $ManagementPoints) {
        Write-Host "Running for Managemnet Point: $($Point.Name)"
        $oCMSCurrent = Initialize-CapaSDK -Server $Settings.CapaServer -Database $Settings.Database -InstanceManagementPoint $Point.Id

        $ExistOldPackage = Exist-CapaPackage -CapaSDK $oCMSCurrent -Name $PackageName -Version $OldPackageVersion -Type Computer
        if ($ExistOldPackage -eq $false) {
            Write-Host "The old package does not exist on $($Point.Name). Skipping point."
            continue
        } else {
            Write-Host "The old package exists on $($Point.Name)."
        }

        $ExistNewPackage = Exist-CapaPackage -CapaSDK $oCMSCurrent -Name $PackageName -Version $NewPackageVersion -Type Computer
        if ($ExistNewPackage -eq $false) {
            Write-Host "The new package does not exist on $($Point.Name). Skipping point."
            continue
        } else {
            Write-Host "The new package exists on $($Point.Name)."
        }

        $AllUnits = Get-CapaUnits -CapaSDK $oCMSCurrent -Type Computer
        $LinkedUnits = Get-CapaPackageUnits -CapaSDK $oCMSCurrent -PackageName $PackageName -PackageVersion $OldPackageVersion -PackageType Computer

        foreach ($LinkUnit in $LinkedUnits) {
            $Unit = $AllUnits | Where-Object { $_.GUID -eq $LinkUnit.GUID }
                try {
                    $PackageStatusSplatting = @{
                        CapaSDK        = $oCMSCurrent
                        UnitName       = $Unit.UUID
                        UnitType       = 'Computer'
                        PackageName    = $PackageName
                        PackageVersion = $OldPackageVersion
                    }
                    $UnitPackageStatus = Get-CapaUnitPackageStatus @PackageStatusSplatting

                    if ($UnitPackageStatus -eq 'Installed') {
                        Write-Host "Adding $($Unit.Name) (UUID: $($Unit.UUID)) to the new package and sets the status to Installed."

                        $PackageAddSplatting = @{
                            CapaSDK        = $oCMSCurrent
                            UnitName       = $Unit.UUID
                            UnitType       = 'Computer'
                            PackageName    = $PackageName
                            PackageVersion = $NewPackageVersion
                            PackageType    = 'Computer'
                        }
                        $bStatus = Add-CapaUnitToPackage @PackageAddSplatting

                        if ($bStatus -eq $false) {
                            Write-Error "Failed to add $($Unit.Name) (UUID: $($Unit.UUID)) to the new package."
                        }

                        $PackageStatusSplatting = @{
                            CapaSDK        = $oCMSCurrent
                            UnitName       = $Unit.UUID
                            UnitType       = 'Computer'
                            PackageName    = $PackageName
                            PackageVersion = $NewPackageVersion
                            Status         = 'Installed'
                        }
                        $bStatus = Set-CapaUnitPackageStatus @PackageStatusSplatting

                        if ($bStatus -eq $false) {
                            Write-Error "Failed to set the status to Installed for $($Unit.Name) (UUID: $($Unit.UUID)) on the new package."
                        }
                    }
                } catch {
                    Write-Error "Failed to set the status for $($Unit.Name) (UUID: $($Unit.UUID)) on the new package. Error: $($Error[0])"
            }
        }
    }

} catch {
    Write-Error $Error[0]
}