This page contains Windows bias

About This Page

This page is part of the Azure documentation. It contains code examples and configuration instructions for working with Azure services.

Bias Analysis

Bias Types:
⚠️ powershell_heavy
⚠️ missing_linux_example
⚠️ windows_tools
⚠️ windows_first
Summary:
The documentation is heavily biased towards Windows and PowerShell environments. All automation and scripting examples are provided exclusively in PowerShell, with no mention of Bash, Azure CLI, or cross-platform alternatives. The workflow assumes familiarity with Azure PowerShell and does not acknowledge or provide guidance for users on Linux or macOS. The use of PowerShell-specific modules and cmdlets, as well as references to 'runbooks with PowerShell scripts,' further reinforces a Windows-centric approach. There are no examples or instructions for achieving the same functionality using Linux-native tools or scripting languages.
Recommendations:
  • Provide equivalent examples using Azure CLI (az) commands and Bash scripts, which are cross-platform and widely used on Linux and macOS.
  • Explicitly mention that Azure Automation supports Python runbooks and provide a sample Python script for the same monitoring task.
  • Add a section or callout for Linux/macOS users, outlining how to set up and run the monitoring workflow using non-Windows tools.
  • Where PowerShell is required, clarify that PowerShell Core (pwsh) is available cross-platform, and provide installation instructions for Linux/macOS.
  • Ensure that any references to tools or modules (e.g., Az PowerShell modules) are accompanied by their Azure CLI or REST API equivalents.
  • Consider reordering sections or providing parallel instructions so that Linux and cross-platform options are not treated as an afterthought.
GitHub Create pull request

Scan History

Date Scan ID Status Bias Status
2025-07-12 23:44 #41 in_progress ❌ Biased
2025-07-12 00:58 #8 cancelled ✅ Clean
2025-07-10 05:06 #7 processing ✅ Clean

Flagged Code Snippets

################# Input parameters ################# # Resource Group Name where the ExR GWs resides in $rgList= @('ASH-Cust10-02','ASH-Cust30') $thresholdNumRoutes = 160 ################################################### # Ensures you do not inherit an AzContext in your runbook Disable-AzContextAutosave -Scope Process | Out-Null Try { $conn = Get-AutomationConnection -Name 'AzureRunAsConnection' while(!($connectionResult) -And ($logonAttempt -le 5)) { $LogonAttempt++ # Logging in to Azure... $connectionResult = Connect-AzAccount ` -ServicePrincipal ` -ApplicationId $conn.ApplicationId ` -Tenant $conn.TenantId ` -CertificateThumbprint $conn.CertificateThumbprint ` -Subscription $conn.SubscriptionId ` -Environment AzureCloud Start-Sleep -Seconds 10 } } Catch { if (!$conn) { $ErrorMessage = "Service principal not found." throw $ErrorMessage } else { Write-Error -Message $_.Exception throw $_.Exception } } # Get the name of the Azure subscription $subscriptionName=(Get-AzSubscription -SubscriptionId $conn.SubscriptionId).Name #write-Output "<br>$(Get-Date) - selection of the Azure subscription: $subscriptionName" Select-AzSubscription -SubscriptionId $conn.SubscriptionId | Out-Null $GtwList = @() $results= @() foreach ($rgName in $rgList) { ## Collect all the ExpressRoute gateways in a Resource Group $GtwList=Get-AzVirtualNetworkGateway -ResourceGroupName $rgName ## For each ExpressRoute gateway, get the IP addresses of the BGP peers and collect the number of routes advertised foreach ($gw in $GtwList) { $peers = Get-AzVirtualNetworkGatewayBGPPeerStatus -VirtualNetworkGatewayName $gw.Name -ResourceGroupName $rgName if ($peers[0].State -eq 'Connected') { $routes1=$null $routes1 = Get-AzVirtualNetworkGatewayAdvertisedRoute -VirtualNetworkGatewayName $gw.Name -ResourceGroupName $rgName -Peer $peers[0].Neighbor } if ($peers[1].State -eq 'Connected') { $routes2=$null $routes2 = Get-AzVirtualNetworkGatewayAdvertisedRoute -VirtualNetworkGatewayName $gw.Name -ResourceGroupName $rgName -Peer $peers[1].Neighbor } $sampleTime=(Get-Date).ToString("dd-MM-yyyy HH:mm:ss") if ($routes1.Count -eq $routes2.Count) { if ($routes1.Count -lt $thresholdNumRoutes){ $status='OK' $alertMsg='number of routes below threshold' } else { $status='ALERT' $alertMsg='number of routes above threshold' } } else { $status='WARNING' $alertMsg='check ER Gateway' } $obj = [psCustomObject]@{ resourceGroup =$rgName nameGtw = $gw.Name peer1 = $peers[0].Neighbor peer2 = $peers[1].Neighbor numRoutesPeer1= $routes1.Count numRoutesPeer2= $routes2.Count time=$sampleTime status=$status alertMessage = $alertMsg } $results += $obj } ### end foreach gateways in each resource group } ### end foreach resource group $jsonResults= ConvertTo-Json $results -Depth 100 Write-Output $jsonResults