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
⚠️ windows_first
⚠️ missing_linux_example
⚠️ windows_tools
Summary:
The documentation page demonstrates a strong Windows bias. All deployment and cleanup examples use Azure PowerShell scripts, with no mention or example of Azure CLI or Bash equivalents. The Bicep template provisions only Windows VMs, and the allowed OS versions are exclusively Windows. The instructions and references (such as monitoring and starting backup jobs) link to PowerShell-specific guides. There is no guidance for Linux users or for deploying/protecting Linux VMs.
Recommendations:
  • Provide parallel Azure CLI/Bash examples for deploying the Bicep template, starting backup jobs, monitoring, and cleanup.
  • Include or reference a Bicep template that provisions a Linux VM, or show how to modify the template for Linux.
  • Mention both Windows and Linux options in the prerequisites and throughout the guide, including links to relevant Linux documentation.
  • When referencing tools or scripts, present cross-platform options (e.g., Azure CLI before or alongside PowerShell).
  • Ensure that links to further reading or next steps include Linux-focused guides as well as Windows ones.
GitHub Create pull request

Scan History

Date Scan ID Status Bias Status
2025-08-19 00:01 #85 completed ✅ Clean
2025-07-19 13:51 #54 completed ✅ Clean
2025-07-13 21:37 #48 completed ❌ Biased
2025-07-09 13:09 #3 cancelled ✅ Clean
2025-07-08 04:23 #2 cancelled ❌ Biased

Flagged Code Snippets

@description('Specifies a name for generating resource names.') @maxLength(8) param projectName string @description('Specifies the location for all resources.') param location string = resourceGroup().location @description('Specifies the administrator username for the Virtual Machine.') param adminUsername string @description('Specifies the administrator password for the Virtual Machine.') @secure() param adminPassword string @description('Specifies the unique DNS Name for the Public IP used to access the Virtual Machine.') param dnsLabelPrefix string @description('Virtual machine size.') param vmSize string = 'Standard_A2' @description('Specifies the Windows version for the VM. This will pick a fully patched image of this given Windows version.') @allowed([ '2008-R2-SP1' '2012-Datacenter' '2012-R2-Datacenter' '2016-Nano-Server' '2016-Datacenter-with-Containers' '2016-Datacenter' '2019-Datacenter' '2019-Datacenter-Core' '2019-Datacenter-Core-smalldisk' '2019-Datacenter-Core-with-Containers' '2019-Datacenter-Core-with-Containers-smalldisk' '2019-Datacenter-smalldisk' '2019-Datacenter-with-Containers' '2019-Datacenter-with-Containers-smalldisk' ]) param windowsOSVersion string = '2016-Datacenter' var storageAccountName = '${projectName}store' var networkInterfaceName = '${projectName}-nic' var vNetAddressPrefix = '10.0.0.0/16' var vNetSubnetName = 'default' var vNetSubnetAddressPrefix = '10.0.0.0/24' var publicIPAddressName = '${projectName}-ip' var vmName = '${projectName}-vm' var vNetName = '${projectName}-vnet' var vaultName = '${projectName}-vault' var backupFabric = 'Azure' var backupPolicyName = 'DefaultPolicy' var protectionContainer = 'iaasvmcontainer;iaasvmcontainerv2;${resourceGroup().name};${vmName}' var protectedItem = 'vm;iaasvmcontainerv2;${resourceGroup().name};${vmName}' var networkSecurityGroupName = 'default-NSG' resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = { name: storageAccountName location: location sku: { name: 'Standard_LRS' } kind: 'Storage' properties: {} } resource publicIPAddress 'Microsoft.Network/publicIPAddresses@2020-06-01' = { name: publicIPAddressName location: location properties: { publicIPAllocationMethod: 'Dynamic' dnsSettings: { domainNameLabel: dnsLabelPrefix } } } resource networkSecurityGroup 'Microsoft.Network/networkSecurityGroups@2020-06-01' = { name: networkSecurityGroupName location: location properties: { securityRules: [ { name: 'default-allow-3389' properties: { priority: 1000 access: 'Allow' direction: 'Inbound' destinationPortRange: '3389' protocol: 'Tcp' sourceAddressPrefix: '*' sourcePortRange: '*' destinationAddressPrefix: '*' } } ] } } resource vNet 'Microsoft.Network/virtualNetworks@2020-06-01' = { name: vNetName location: location properties: { addressSpace: { addressPrefixes: [ vNetAddressPrefix ] } subnets: [ { name: vNetSubnetName properties: { addressPrefix: vNetSubnetAddressPrefix networkSecurityGroup: { id: networkSecurityGroup.id } } } ] } } resource networkInterface 'Microsoft.Network/networkInterfaces@2020-06-01' = { name: networkInterfaceName location: location properties: { ipConfigurations: [ { name: 'ipconfig1' properties: { privateIPAllocationMethod: 'Dynamic' publicIPAddress: { id: publicIPAddress.id } subnet: { id: '${vNet.id}/subnets/${vNetSubnetName}' } } } ] } } resource virtualMachine 'Microsoft.Compute/virtualMachines@2020-06-01' = { name: vmName location: location properties: { hardwareProfile: { vmSize: vmSize } osProfile: { computerName: vmName adminUsername: adminUsername adminPassword: adminPassword } storageProfile: { imageReference: { publisher: 'MicrosoftWindowsServer' offer: 'WindowsServer' sku: windowsOSVersion version: 'latest' } osDisk: { createOption: 'FromImage' } dataDisks: [ { diskSizeGB: 1023 lun: 0 createOption: 'Empty' } ] } networkProfile: { networkInterfaces: [ { id: networkInterface.id } ] } diagnosticsProfile: { bootDiagnostics: { enabled: true storageUri: storageAccount.properties.primaryEndpoints.blob } } } } resource recoveryServicesVault 'Microsoft.RecoveryServices/vaults@2020-02-02' = { name: vaultName location: location sku: { name: 'RS0' tier: 'Standard' } properties: {} } resource vaultName_backupFabric_protectionContainer_protectedItem 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems@2020-02-02' = { name: '${vaultName}/${backupFabric}/${protectionContainer}/${protectedItem}' properties: { protectedItemType: 'Microsoft.Compute/virtualMachines' policyId: '${recoveryServicesVault.id}/backupPolicies/${backupPolicyName}' sourceResourceId: virtualMachine.id } }
## Validate the deployment ### Start a backup job The template creates a VM and enables backup on the VM. After you deploy the template, you need to start a backup job. For more information, see [Start a backup job](quick-backup-vm-powershell.md#start-a-backup-job). ### Monitor the backup job To monitor the backup job, see [Monitor the backup job](quick-backup-vm-powershell.md#monitor-the-backup-job). ## Clean up resources - If you no longer need to back up the VM, you can clean it up. - To try out restoring the VM, skip the clean-up process. - If you've used an existing VM, you can skip the final [Remove-AzResourceGroup](/powershell/module/az.resources/remove-azresourcegroup) cmdlet to keep the resource group and VM. Follow these steps: 1. Disable protection, remove the restore points and vault. 1. Delete the resource group and associated VM resources, as follows: