Public/Remove-ARCMachineConfiguration.ps1

Function Remove-ARCMachineConfiguration{

[CmdletBinding()]
param (
    [Parameter()]
    [string]
    $PolicyName,
    [Parameter()]
    [string]
    $ResourceGroupName,
    [Parameter()]
    [string]
    $ARCMachineName
)

Begin{
    Write-Verbose "Intializing the function $($MyInvocation.MyCommand.Name)."
    try {
        $MachineConfigurations = Get-AzGuestConfigurationAssignment -ResourceGroupName $ResourceGroupName -MachineName $ARCMachineName -ErrorAction Stop
    }
    catch {
        Write-Error "An error occured while getting the Guest Configuration assignments for the ARC resource $ARCMachineName from the ResourceGroup $ResourceGroupName."
        Break
    }
    
}

Process{

    If($MachineConfigurations){

        Write-Verbose "[$($MachineConfigurations.Count)] Machine Configurations are found for the ARC Resource $ARCMachineName."
        $PolicyMachineConfiguration = $MachineConfigurations | ForEach-Object{
            $_.Name | Where-Object {$_ -match "^$PolicyName$*"}
        }

        if($PolicyMachineConfiguration) {
            Write-Verbose "Found Machine configuration $($PolicyMachineConfiguration) corresponding to the policy $PolicyName."
            
            try {
                Write-Verbose "Removing the Machine configuration $($PolicyMachineConfiguration) from the ARC Machine $ARCMachineName."
                Remove-AzGuestConfigurationAssignment -Name $PolicyMachineConfiguration -ResourceGroupName $ResourceGroupName -MachineName $ARCMachineName -ErrorAction Stop
                Write-Output "Successfully removed Machine configuration $($PolicyMachineConfiguration) from the ARC Machine $ARCMachineName."
            }
            catch {
                Write-Verbose "An error occured while removing the Machine configuration $($PolicyMachineConfiguration) from the ARC Machine $ARCMachineName. Error $($_.Exception.Message)."
            }
            
        }
        else {
            
            Write-Warning "No Machine configuration $($PolicyMachineConfiguration) corresponding to the policy $PolicyName."
            Write-Verbose "No Machine configuration $($PolicyMachineConfiguration) corresponding to the policy $PolicyName."
        }


    }
    else {

        Write-Warning "No Machine Configuration is found for the ARC Resource $ARCMachineName."
        Write-Verbose "No Machine Configuration is found for the ARC Resource $ARCMachineName."
    }
}

End{

    Write-Verbose "Completed the execution of function $($MyInvocation.MyCommand.Name)."
}

}