Governance

    How Do You Identify and Clean Up Orphaned Azure Availability Sets Before They Become a Governance Problem?

    Detect and remediate orphaned Azure Availability Sets that create governance problems, audit overhead, and risk of accidental VM placement in your Azure environment.

    Spotto
    February 2026
    15 min read

    Orphaned availability sets accumulate silently when VMs are decommissioned, migrated to VMSS Flex, or moved between resource groups. They create no alerts, generate no cost line items, and sit in your subscription until someone trips over them during an audit or accidentally deploys a new VM into an obsolete fault-domain configuration. Spotto continuously scans for these empty availability sets and flags them for review, so your team can clean them up before they become a governance problem.

    Availability sets were the original mechanism for distributing VMs across fault domains and update domains in Azure. As workloads have evolved -- and Microsoft now recommends VMSS Flexible orchestration for new deployments -- many organizations have migrated VMs out of availability sets without deleting the empty containers left behind.

    These orphaned resources are not billed directly, but they impose real operational costs: polluted inventories, confused engineers, compliance findings, and infrastructure-as-code drift that compounds over time.

    What Problem This Solves

    Orphaned availability sets cause five distinct problems that compound as your Azure estate grows:

    Inventory pollution -- An MSP managing 50+ subscriptions can easily accumulate hundreds of orphaned availability sets. Each one appears in resource lists, ARM exports, and governance dashboards, making it harder to identify the resources that actually matter. Engineers waste time investigating resources that serve no purpose.
    Accidental VM placement into obsolete configurations -- An empty availability set with a 2-fault-domain, 5-update-domain configuration from 2019 still accepts new VMs. If an engineer deploys a VM into this set without understanding its history, the VM inherits fault-domain constraints that may not align with the current architecture, potentially reducing availability rather than improving it.
    Audit and compliance overhead -- SOC 2, ISO 27001, and CIS Azure Benchmarks all require organizations to maintain accurate resource inventories and justify the existence of infrastructure components. Orphaned availability sets trigger findings during audits, requiring investigation time to determine whether they are intentionally retained or simply forgotten.
    IaC configuration drift -- ARM templates, Bicep files, and Terraform configurations may still reference availability sets that are empty in production. This creates a gap between declared state and actual state, causing deployment failures, confusing plan outputs, and making it difficult to trust your IaC as a source of truth.
    Cost of inaction -- While empty availability sets have no direct Azure billing, the operational cost is real. If a governance review takes 15 minutes per tenant per month to investigate orphaned resources, and you manage 100 tenants, that is 25 hours of engineering time per month spent on resources that should not exist.

    How It Works: Detecting and Remediating Orphaned Availability Sets

    Detection Logic

    The detection and remediation process follows a simple set of if/then rules:

    If the availability set contains zero VMs -- it is classified as orphaned and flagged for review.
    If the orphaned set has no governance tags (e.g., no owner, no purpose, no retention tag) -- escalate to the subscription owner for justification.
    If IaC references exist (ARM, Bicep, Terraform state) -- perform code cleanup first before deleting the Azure resource.
    If the set has been empty for more than 90 days with no documented justification -- recommend immediate deletion.

    Validation Evidence

    Before deleting any availability set, validate that it is genuinely orphaned by checking:

    The virtualMachines array in the availability set properties is empty
    No active IaC references (Terraform state, ARM/Bicep templates, deployment history)
    No pending DR runbook or failover procedure that expects VMs to be placed in the set
    The Azure Activity Log shows no VM additions in the past 90+ days

    Key constraint: Some organizations retain empty availability sets as placeholders for disaster recovery scenarios, where VMs are deployed into pre-configured availability sets during failover. Always confirm with DR documentation and the operations team before deleting an availability set that might be part of a recovery plan.

    Detection via Azure CLI

    The following command lists all availability sets with zero VMs across the current subscription:

    az vm availability-set list \
      --query "[?length(virtualMachines)==`0`].{Name:name, ResourceGroup:resourceGroup, Location:location}" \
      --output table

    Detection via Azure Resource Graph (KQL)

    For cross-subscription detection at scale, use Azure Resource Graph:

    resources
    | where type == "microsoft.compute/availabilitysets"
    | where array_length(properties.virtualMachines) == 0
    | project name, resourceGroup, subscriptionId, location, tags
    | order by subscriptionId, resourceGroup

    Deletion via Azure CLI

    Once an availability set has been validated as genuinely orphaned and safe to remove:

    az vm availability-set delete \
      --name <AvSetName> \
      --resource-group <ResourceGroupName>

    Automated Detection via Azure Automation

    Deploy the following PowerShell runbook in Azure Automation to scan for orphaned availability sets on a recurring schedule and send notifications:

    # Azure Automation Runbook: Detect Orphaned Availability Sets
    # Schedule: Weekly (recommended)
    
    Connect-AzAccount -Identity
    
    $subscriptions = Get-AzSubscription
    $orphaned = @()
    
    foreach ($sub in $subscriptions) {
        Set-AzContext -SubscriptionId $sub.Id | Out-Null
        $availSets = Get-AzAvailabilitySet
    
        foreach ($avSet in $availSets) {
            if ($avSet.VirtualMachinesReferences.Count -eq 0) {
                $orphaned += [PSCustomObject]@{
                    Subscription  = $sub.Name
                    ResourceGroup = $avSet.ResourceGroupName
                    Name          = $avSet.Name
                    Location      = $avSet.Location
                    FaultDomains  = $avSet.PlatformFaultDomainCount
                    UpdateDomains = $avSet.PlatformUpdateDomainCount
                }
            }
        }
    }
    
    if ($orphaned.Count -gt 0) {
        Write-Output "Found $($orphaned.Count) orphaned availability sets:"
        $orphaned | Format-Table -AutoSize
        # Optional: Send email or webhook notification
    } else {
        Write-Output "No orphaned availability sets found."
    }

    Validating IaC References Before Deletion

    Before deleting an availability set, verify that no active IaC deployment references it. Use the what-if operation to detect references:

    # Check if any ARM/Bicep deployment references the availability set
    az deployment group what-if \
      --resource-group <ResourceGroupName> \
      --template-file main.bicep \
      --query "changes[?contains(resourceId, 'availabilitySets')]" \
      --output table

    If the availability set appears in the deployment output, update or remove the IaC reference before deleting the Azure resource.

    Availability Set vs. VMSS Flex Quick Reference

    Understanding the differences between availability sets and VMSS Flexible orchestration helps determine whether orphaned sets should be replaced or simply deleted:

    FeatureAvailability SetVMSS Flexible Orchestration
    Max instances2001,000
    Fault domainsUp to 3Up to 3
    Update domainsUp to 20Not applicable (rolling upgrades)
    Availability zone supportNo (single datacenter)Yes (cross-zone spreading)
    Auto-scalingNoYes (built-in autoscale)
    SLA99.95% (2+ VMs)99.95% (FD spreading) / 99.99% (AZ spreading)
    Microsoft recommendationLegacy -- use for existing workloads onlyRecommended for all new deployments

    Decision Flowchart for Orphaned Availability Set Remediation

    Orphaned Availability Set Remediation Flowchart
    ================================================
    
    [Start] Is the availability set empty (0 VMs)?
      |
      +-- NO  --> Not orphaned. No action required.
      |
      +-- YES --> Is the availability set referenced in IaC (Terraform, ARM, Bicep)?
            |
            +-- YES --> Remove the IaC reference first.
            |             |
            |             +-- Run terraform state rm or update ARM/Bicep template.
            |             +-- Deploy updated IaC to confirm no drift.
            |             +-- Then proceed to deletion below.
            |
            +-- NO  --> Is the availability set part of a DR/failover plan?
                  |
                  +-- YES --> Document the retention reason.
                  |             |
                  |             +-- Tag with: Purpose=DR, RetentionReview=<date>
                  |             +-- Schedule review in 90 days.
                  |             +-- DO NOT DELETE.
                  |
                  +-- NO  --> Has the set been empty for > 90 days?
                        |
                        +-- YES --> Delete immediately.
                        |             |
                        |             +-- az vm availability-set delete
                        |             +-- Update resource inventory.
                        |             +-- Log deletion for audit trail.
                        |
                        +-- NO  --> Tag for review.
                                      |
                                      +-- Tag with: Status=Orphaned, DetectedDate=<date>
                                      +-- Notify subscription owner.
                                      +-- Re-evaluate in 30 days.

    Decision Tree: Keep vs. Delete

    Use this simplified decision tree for each orphaned availability set:

    Step 1: Check for active DR/failover dependency. If the availability set is referenced in a disaster recovery runbook or failover automation, tag it with a retention reason and review date. Do not delete.
    Step 2: Check for IaC references. Search Terraform state files, ARM templates, and Bicep modules for references to the availability set resource ID. If references exist, remove them from code and redeploy before deleting the Azure resource.
    Step 3: Confirm with the resource group owner. Send a notification to the subscription or resource group owner with the availability set name, resource group, and the date it was last modified. If no response within 14 days, proceed with deletion.

    Decision Tree: Migration vs. Cleanup

    When an orphaned availability set is found, determine whether the original workload should be migrated to VMSS Flex or simply cleaned up:

    Step 1: Were the original VMs migrated to another availability mechanism? If the VMs were moved to VMSS Flex, availability zones, or decommissioned entirely, the old availability set serves no purpose. Delete it.
    Step 2: Are there VMs that should still be in an availability group but are not? If VMs exist in the same resource group without any availability configuration, evaluate whether they should be placed in a new VMSS Flex orchestration rather than back into the legacy availability set. This is a migration opportunity, not a cleanup task.

    Failure Modes

    Failure mode: IaC references not cleaned up

    If you delete an availability set that is still referenced in Terraform state, the next terraform plan will show a drift and attempt to recreate the resource. If the availability set is referenced in an ARM or Bicep deployment, the deployment will fail with a "resource not found" error. Always remove IaC references before deleting the Azure resource.

    Failure mode: DR runbook dependency

    Disaster recovery automation may reference availability sets by name or resource ID. If you delete a set that is part of a failover procedure, the DR runbook will fail when it attempts to deploy VMs into the deleted set during a real disaster. Confirm with the DR team before deleting any availability set in a production subscription.

    Failure mode: Availability set recreation is not reversible

    Once deleted, an availability set cannot be restored. A new availability set can be created with the same name, but existing VMs cannot be added to an availability set after creation -- VMs can only be assigned to an availability set at deployment time. This means deleting an availability set that still has a valid purpose requires redeploying all associated VMs.

    Common Questions

    What is an orphaned availability set?

    An orphaned availability set is an Azure availability set resource that contains zero virtual machines. This typically happens when VMs are decommissioned, migrated to VMSS Flexible orchestration, or moved to availability zones, but the original availability set container is not deleted afterward. The empty set remains in the subscription indefinitely until manually removed.

    Can I just delete all empty availability sets?

    Not without validation. While most empty availability sets are genuinely orphaned, some may be intentionally retained for disaster recovery scenarios, where VMs are deployed into pre-configured availability sets during failover. Others may be referenced in IaC configurations that would break if the resource were deleted. Always check for DR dependencies and IaC references before deletion.

    What happens if I delete one referenced in Terraform state?

    Terraform will detect the drift on the next terraform plan and propose recreating the availability set. If you intended to remove it, you should run terraform state rm for the resource before or after deleting it from Azure, and also remove the resource block from your Terraform configuration files. If you delete the Azure resource without updating Terraform, the state file becomes inconsistent and subsequent deployments may fail or produce unexpected results.

    Is there any cost to keeping empty availability sets?

    Empty availability sets have no direct Azure billing. However, the indirect cost is significant: they pollute resource inventories, trigger compliance audit findings, create IaC drift, and consume engineering time during governance reviews. For an MSP managing 100 tenants, the cumulative operational cost of investigating orphaned resources can reach 25+ hours per month.

    Should I migrate existing availability sets to VMSS Flex?

    Microsoft recommends VMSS Flexible orchestration for all new deployments. For existing workloads, migration should be evaluated based on the workload requirements. VMSS Flex provides availability zone support, auto-scaling, and higher instance limits. However, migration requires redeploying VMs -- you cannot move an existing VM from an availability set to a VMSS Flex in-place. This makes it a planned project, not a quick cleanup task.

    How do I prevent new orphaned availability sets from accumulating?

    Deploy an Azure Policy that audits or denies the creation of new availability sets (since Microsoft recommends VMSS Flex for new workloads). Implement tagging policies that require every availability set to have an owner and purpose tag. Set up automated detection via Azure Automation or Spotto to scan for empty availability sets on a weekly basis and notify the responsible team.

    How do MSPs handle orphaned availability sets across multiple tenants?

    MSPs typically use Azure Lighthouse to query across all managed tenants with a single Azure Resource Graph query. The KQL query provided above works across all delegated subscriptions when run from the managing tenant. Results can be exported to a central governance dashboard and assigned to per-tenant remediation queues. Spotto automates this entire workflow, scanning all connected tenants and flagging orphaned resources for review.

    Are availability sets deprecated?

    Availability sets are not formally deprecated, but Microsoft's guidance has shifted clearly toward VMSS Flexible orchestration for new deployments. Availability sets remain supported for existing workloads, and there is no announced retirement date. However, new features and improvements are being added to VMSS Flex rather than availability sets, making them a legacy construct in practice.

    What is the difference between an availability set and a VMSS Flexible orchestration?

    An availability set distributes VMs across fault domains and update domains within a single datacenter. It does not support availability zones, auto-scaling, or more than 200 instances. VMSS Flexible orchestration provides all of these capabilities plus cross-zone spreading for higher SLA (99.99% vs. 99.95%). VMSS Flex also supports mixing VM sizes within the same scale set and allows individual VM management similar to standalone VMs.

    How do I find availability sets that have been orphaned for a long time?

    Cross-reference the Azure Resource Graph query results with the Azure Activity Log. Query the Activity Log for each empty availability set to find the last time a VM was added or removed. If no VM-related activity has occurred in 90+ days, the set has been orphaned for at least that long. You can also check the lastModifiedDate in the resource metadata, though this may reflect tag changes or other non-VM modifications.

    Use-Case and Scenario Coverage

    Scenario 1: MSP Managing 80 Azure Tenants

    Before

    340 orphaned sets

    Scattered across 80 tenants, no visibility

    After

    30% governance review time reduction

    Clean inventories, automated detection

    Actions taken: Ran cross-tenant Resource Graph query via Azure Lighthouse. Identified 340 empty availability sets. Validated 312 as safe to delete (no DR dependencies, no IaC references). Tagged 28 for review with subscription owners. Cleaned up 312 sets in one batch. Deployed Azure Policy to audit new availability set creation. Monthly governance review time dropped by 30% due to cleaner resource inventories.

    312 orphaned sets removed

    Scenario 2: Enterprise Migrating from Availability Sets to VMSS Flex

    Before

    200 VMs, 15 availability sets

    Legacy availability set architecture

    After (6 months)

    12 orphaned sets identified and removed

    3 retained for phased migration

    Actions taken: Migrated 200 VMs from 15 availability sets to VMSS Flex orchestration over 6 months. After migration, 12 availability sets were empty but still referenced in Terraform. Removed Terraform resource blocks and ran terraform state rm for each. Deleted the 12 empty sets from Azure. Retained 3 sets temporarily as the final migration wave was still in progress. Set a calendar reminder to delete the remaining 3 after migration completion.

    12 orphaned sets cleaned up post-migration

    Scenario 3: SaaS Company with Dev/Test Environment Sprawl

    Before

    85 orphaned sets across 30 subscriptions

    Accumulated over 12 months in dev/test environments

    After

    Zero orphaned sets

    Automated weekly scan prevents recurrence

    Actions taken: Dev/test environments had no DR dependencies and minimal IaC governance, making cleanup straightforward. All 85 orphaned availability sets were validated as safe to delete within a single sprint. Deployed an Azure Automation runbook to scan weekly and notify the platform team of any new orphaned sets. Implemented a tagging policy requiring all new availability sets to have an owner and expiry date.

    85 orphaned sets removed in one sprint

    Scenario 4: Compliance Audit Preparation

    Before

    8 availability sets flagged by auditor

    Healthcare org preparing for SOC 2 Type II

    After

    4 hours investigation saved

    Clean finding resolution documented

    Actions taken: During SOC 2 Type II audit preparation, the external auditor flagged 8 empty availability sets as unexplained infrastructure components. The security team spent 4 hours investigating each one: checking Activity Logs, cross-referencing IaC, and interviewing resource group owners. All 8 were confirmed as orphaned and deleted. Post-cleanup, the organization deployed Spotto to automatically detect and report orphaned resources before the next audit cycle, eliminating this class of finding entirely.

    Audit finding resolved -- 4 hours recovered

    Implementation Guidance

    Preconditions

    Contributor or Owner role on target resource groups (required for deletion)
    Access to IaC repositories (Terraform state, ARM/Bicep templates) to check for references
    Access to DR documentation and failover runbooks to verify retention requirements

    Required Inputs

    List of empty availability sets from the Azure Resource Graph query
    IaC search results confirming whether each availability set is referenced in code
    Team confirmation from subscription owners or resource group owners on sets flagged for review

    Rollout Approach

    Step 1: Inventory and classify
    (a) Run the Resource Graph query across all subscriptions.
    (b) Classify each result: safe to delete, requires IaC cleanup, requires DR review.
    (c) Assign each item to the responsible team or owner.
    Step 2: Clean up dev/test first
    (a) Delete all orphaned sets in non-production subscriptions (lowest risk).
    (b) Validate that no deployments or automations break.
    (c) Document the process for production cleanup.
    Step 3: IaC cleanup
    (a) Remove references from Terraform, ARM, and Bicep configurations.
    (b) Run terraform state rm for Terraform-managed sets.
    (c) Redeploy IaC to confirm clean state.
    Step 4: Production cleanup
    (a) Delete validated orphaned sets in production subscriptions.
    (b) Log each deletion in your change management system.
    (c) Confirm with subscription owners that no issues arise.
    Step 5: Prevention
    (a) Deploy Azure Policy to audit or deny new availability set creation.
    (b) Implement automated weekly scanning via Azure Automation or Spotto.
    (c) Add availability set cleanup to your standard VM decommission runbook.

    Terraform Removal

    When removing an orphaned availability set from Terraform-managed infrastructure:

    # Before: Terraform configuration with availability set
    resource "azurerm_availability_set" "legacy_avset" {
      name                = "avset-legacy-web"
      location            = azurerm_resource_group.main.location
      resource_group_name = azurerm_resource_group.main.name
      platform_fault_domain_count  = 2
      platform_update_domain_count = 5
    }
    
    # Step 1: Remove from Terraform state
    terraform state rm azurerm_availability_set.legacy_avset
    
    # Step 2: Remove the resource block from your .tf files
    # (Delete the resource block shown above)
    
    # Step 3: Verify clean plan
    terraform plan
    # Expected output: No changes. Your infrastructure matches the configuration.
    
    # Step 4: Delete from Azure
    az vm availability-set delete \
      --name avset-legacy-web \
      --resource-group rg-main

    Bicep/ARM Removal

    When removing an orphaned availability set from Bicep-managed infrastructure:

    // Before: Bicep template with availability set
    resource legacyAvSet 'Microsoft.Compute/availabilitySets@2023-09-01' = {
      name: 'avset-legacy-web'
      location: resourceGroup().location
      properties: {
        platformFaultDomainCount: 2
        platformUpdateDomainCount: 5
      }
      sku: {
        name: 'Aligned'
      }
    }
    
    // After: Remove the resource block entirely
    // (Delete the resource block shown above)
    
    // Step 1: Deploy updated template to remove from deployment state
    // az deployment group create --resource-group rg-main --template-file main.bicep
    
    // Step 2: Delete from Azure (if not auto-removed by deployment in complete mode)
    // az vm availability-set delete --name avset-legacy-web --resource-group rg-main

    Effort Estimate

    Per-set validation: ~1 hour per availability set for thorough validation (IaC check, DR check, owner confirmation)
    Bulk initial query: 2-4 hours to run the Resource Graph query across all subscriptions, classify results, and assign to teams
    IaC cleanup: 30 minutes per set if Terraform-managed, 15 minutes per set if Bicep/ARM-managed
    Ongoing maintenance: 30 minutes per week if automated scanning is deployed; 2-4 hours per month without automation

    Failure Modes and Rollback

    Deleted a set referenced in Terraform: Run terraform state rm to remove the stale reference, then update the configuration to remove the resource block. If the resource was accidentally needed, you must recreate the availability set and redeploy VMs into it (VMs cannot be added to availability sets after creation).
    Deleted a set needed for DR failover: Recreate the availability set with the same configuration (name, fault domains, update domains, SKU alignment). Update DR runbooks with the new resource ID. Test the failover procedure to confirm it works with the recreated set. Note that any existing VMs that were supposed to use this set during failover will need their deployment scripts updated.
    Deleted a set in the wrong environment: Recreate the availability set and notify the affected team. Since VMs cannot be added to availability sets post-creation, any VMs that should have been in the set will need to be redeployed -- schedule this during the next maintenance window.

    Rollback Strategy

    Availability set deletion is not reversible in the traditional sense. You can recreate an availability set with the same name and configuration, but you cannot add existing VMs to it -- VMs can only be assigned to an availability set at deployment time. This makes prevention (thorough validation before deletion) more important than rollback.

    If a deletion was made in error and VMs need to be placed back into an availability set, the rollback path is: (1) recreate the availability set, (2) redeploy affected VMs into the new set during a maintenance window, (3) update all IaC references to point to the new resource ID.

    Azure Policy for Prevention

    Deploy the following Azure Policy to audit the creation of new availability sets, encouraging teams to use VMSS Flex instead:

    {
      "mode": "All",
      "policyRule": {
        "if": {
          "field": "type",
          "equals": "Microsoft.Compute/availabilitySets"
        },
        "then": {
          "effect": "audit"
        }
      },
      "parameters": {},
      "displayName": "Audit creation of availability sets",
      "description": "Audits the creation of new availability sets. Microsoft recommends VMSS Flexible orchestration for new deployments. Existing availability sets should be reviewed for migration to VMSS Flex."
    }

    Tip: Use "audit" effect initially to identify teams still creating availability sets. Switch to "deny" after confirming all teams have adopted VMSS Flex for new deployments. This avoids breaking existing CI/CD pipelines that may still deploy availability sets as part of legacy templates.

    Cleanup Action Summary

    CategoryCriteriaActionTimeline
    ImmediateEmpty, no IaC references, no DR dependency, no owner response in 14 daysDeleteSame day
    Code-firstEmpty, referenced in IaC, no DR dependencyRemove IaC reference, then deleteWithin 1 sprint
    DocumentedEmpty, owner confirms no longer needed, awaiting change approvalSchedule deletion in change windowWithin 30 days
    DR-reservedEmpty, confirmed DR/failover dependencyTag with retention reason, review in 90 daysNo deletion -- periodic review

    What to Do Next

    1. Run the Resource Graph query to identify all empty availability sets across your subscriptions. This gives you the scope of the problem in under 5 minutes.
    2. Classify each result using the decision flowchart: immediate delete, code-first, documented, or DR-reserved.
    3. Clean up dev/test subscriptions first to build confidence in the process before tackling production.
    4. Deploy automated detection via Azure Automation or Spotto to prevent orphaned availability sets from accumulating again.

    Spotto continuously scans your Azure environment for orphaned availability sets and other governance gaps. Rather than running one-off queries, Spotto provides ongoing visibility across all connected tenants, automatically flagging orphaned resources and tracking remediation progress. This is especially valuable for MSPs managing dozens of tenants, where manual governance reviews cannot scale.

    Summary

    Orphaned availability sets are empty containers left behind when VMs are decommissioned or migrated. They have no direct cost but create real governance overhead.
    Detection is straightforward using Azure Resource Graph to find availability sets with zero VMs across all subscriptions in a single query.
    Validation before deletion is critical -- check for DR dependencies, IaC references, and pending migration plans before removing any availability set.
    IaC cleanup must happen before Azure resource deletion to prevent state drift in Terraform, ARM, and Bicep configurations.
    VMSS Flexible orchestration is the recommended replacement for new workloads, offering availability zone support, auto-scaling, and higher SLA.
    Azure Policy can prevent recurrence by auditing or denying the creation of new availability sets and enforcing tagging standards.
    Automated scanning eliminates manual governance reviews -- tools like Spotto provide continuous detection across all tenants, ensuring orphaned resources are caught before they become audit findings.

    The challenges outlined in this article — orphaned resource detection, governance drift, manual audit overhead — are the same ones our customers work through across their Azure environments. The difference is they use Spotto to surface these issues automatically, rather than running the analysis by hand.

    Stop Managing Ghost Resources

    Spotto automatically detects orphaned availability sets and other governance gaps across all your Azure tenants -- so your team can focus on infrastructure that matters instead of investigating resources that should not exist.

    Free Trial

    Disclaimer: This article is provided for informational purposes only and does not constitute professional advice. Azure pricing, features, and service behavior may have changed since publication. Always validate recommendations against your specific environment and consult Microsoft's official documentation before making changes to production infrastructure. Spotto is not liable for any actions taken based on the content of this article.