Public/Update-AvdDiagnostics.ps1

function Update-AvdDiagnostics {
    <#
    .SYNOPSIS
    Updates the AVD Diagnostics settings to an another LogAnalytics workspace or categories.
    .DESCRIPTION
    This command will help you updating the Log Analytics workspace or adding/removing log catagories.
    .PARAMETER HostPoolName
    Enter the name of the hostpool you want to enable start vm on connnect.
    .PARAMETER ResourceGroupName
    Enter the name of the resourcegroup where the hostpool resides in.
    .PARAMETER Workspace
    Enter the name(s) of the AVD workspaces
    .PARAMETER LAWorkspace
    Enter the name of the Log Analytics Workspace
    .EXAMPLE
    Update-AvdDiagnostics -HostPoolName avd-hostpool-001 -ResourceGroupName rg-avd-001 -AvdWorkspace avd-workpace-001 -DiagnosticsName
    #>

    [CmdletBinding(DefaultParameterSetName = 'Category')]
    param (
        [parameter(Mandatory)]
        [parameter(ParameterSetName = 'Category')]
        [parameter(ParameterSetName = 'LAWS')]
        [ValidateNotNullOrEmpty()]
        [string]$HostpoolName,

        [parameter(Mandatory)]
        [parameter(ParameterSetName = 'Category')]
        [parameter(ParameterSetName = 'LAWS')]
        [string]$ResourceGroupName,

        [parameter(ParameterSetName = 'Category')]
        [string]$AvdWorkspace,

        [parameter(Mandatory, ParameterSetName = 'LAWS')]
        [string]$LAWorkspace,

        [parameter(Mandatory, ParameterSetName = 'LAWS')]
        [string]$LaResourceGroupName,

        [parameter(Mandatory)]
        [parameter(ParameterSetName = 'Category')]
        [parameter(ParameterSetName = 'LAWS')]
        [string]$DiagnosticsName,

        [parameter(ParameterSetName = 'LAWS')]
        [parameter(Mandatory, ParameterSetName = 'Category')]
        [ValidateSet("Checkpoint", "Error", "Management", "Connection", "HostRegistration")]
        [array]$Categories
        
    )
    Begin {
        AuthenticationCheck
        $token = GetAuthToken -resource $Script:AzureApiUrl
        $parameters = @{
            HostPoolName      = $HostpoolName 
            ResourceGroupName = $ResourceGroupName
        }
        $Hostpool = Get-AvdHostPool @parameters
    }
    Process {
        switch ($PsCmdlet.ParameterSetName) {
            LAWS {
                Write-Verbose "LAWS"
                try { 
                    $url = $Script:AzureApiUrl + "subscriptions/" + $script:subscriptionId + "/resourceGroups/" + $LaResourceGroupName + "/providers/Microsoft.OperationalInsights/workspaces/" + $LAWorkspace + "?api-version=2020-08-01"
                    $loganalyticsParameters = @{
                        URI     = $url 
                        Method  = "GET"
                        Headers = $token
                    }
                    $laws = Invoke-RestMethod @loganalyticsParameters
                    $categoryParameters = @{
                        uri     = $Script:AzureApiUrl + "$($Hostpool.Id)/providers/microsoft.insights/diagnosticSettings/$($diagnosticsName)?api-version=2017-05-01-preview"
                        Method  = "GET"
                        Headers = $token
                    }
                    if ($Categories) {
                        $CategoryBody = Create-CategoryArray -Categories $Categories
                    }
                    else {
                        $CategoryBody = (Invoke-RestMethod @categoryParameters).properties.logs
                    }
                }
                catch {
                    Write-Error "Log Analytics Workspace $LAWorkspace does not exist."
                }
            }
            Category {
                Write-Verbose "Category"
                $CategoryBody = Create-CategoryArray -Categories $Categories
            }
            Default {
                Write-Error "No Log Analytics Workspace provided"
            }
        }
        $diagnosticsBody = @{
            Properties = @{
                workspaceId = $Laws.id
                logs        = $CategoryBody
            }
        }    
        $parameters = @{
            uri     = $Script:AzureApiUrl + "/$($Hostpool.Id)/providers/microsoft.insights/diagnosticSettings/$($diagnosticsName)?api-version=2017-05-01-preview"
            Method  = "PUT"
            Headers = $token
            Body    = $diagnosticsBody | ConvertTo-Json -Depth 4
        }
        Invoke-RestMethod @parameters
    }
}