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. It exclusively provides PowerShell-based automation scripts for deploying Azure resources, with no equivalent Bash or Linux shell examples. The prerequisites recommend Visual Studio 2019 (a Windows-centric IDE) and Azure PowerShell, and the deployment workflow is described only in terms of PowerShell scripts. While some steps use Azure CLI (which is cross-platform), these are embedded within PowerShell scripts, and there are no standalone Linux/Bash instructions. Linux users are left to adapt the instructions themselves.
Recommendations:
- Provide equivalent Bash/Linux shell scripts for all deployment steps, especially for resource provisioning and automation.
- List cross-platform tools (e.g., VS Code, Azure CLI) before or alongside Windows-specific tools like Visual Studio.
- Clearly indicate which steps are cross-platform and which are Windows-only, and offer alternatives where possible.
- Include a dedicated section or callouts for Linux/macOS users, ensuring parity in setup and deployment instructions.
- Where PowerShell is used for automation, provide Bash alternatives or reference Azure CLI commands that can be run directly in a Linux shell.
Create pull request
Flagged Code Snippets
$file = Read-Host "Please Enter the location to the zipped Database DacPac file:"
Set-AzStorageBlobContent -File $file -Container "sqldatabasedacpac" -Blob "SQLDatabasedacpac.zip" -Context $sa.Context
$DacpacFileSASURL = New-AzStorageBlobSASToken -Container "sqldatabasedacpac" -Blob "SQLDatabasedacpac.zip" -Context $sa.Context -Permission r -StartTime (Get-Date).DateTime -ExpiryTime (Get-Date).AddMonths(12) -FullUri
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Name $NetworkSecGroup
if($nsg -eq $null)
{
Write-Output("Network Security Group $NetworkSecGroup does not exist in the resource group $ResourceGroup")
$rule1 = New-AzNetworkSecurityRuleConfig -Name "SSH" -Description "Allow SSH" -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 22
$rule2 = New-AzNetworkSecurityRuleConfig -Name "SQL" -Description "Allow SQL" -Access Allow -Protocol Tcp -Direction Inbound -Priority 101 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 1600
New-AzNetworkSecurityGroup -Name $NetworkSecGroup -ResourceGroupName $ResourceGroup -Location $location -SecurityRules $rule1, $rule2
$nsg = Get-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Name $NetworkSecGroup
}
else
{
Write-Output ("Network Security Group $NetworkSecGroup exists in the resource group $ResourceGroup")
}
Import-Module Az.Accounts -RequiredVersion 1.7.3
Import-Module -Name Az -RequiredVersion 3.5.0
Import-Module Az.IotHub -RequiredVersion 2.1.0
Import-Module Az.Compute -RequiredVersion 3.5.0
az extension add --name azure-iot
az extension add --name azure-cli-ml
$ResourceGroup = "<name_of_the_resource_group>"
$IoTHubName = "<name_of_the_IoT_hub>"
$location = "<location_of_your_Azure_Subscription>"
$SubscriptionName = "<your_azure_subscription>"
$NetworkSecGroup = "<name_of_your_network_security_group>"
$StorageAccountName = "<name_of_your_storage_account>"
$AzVM = Get-AzVM -ResourceGroupName $ResourceGroup -Name $EdgeDeviceId
If($AzVM -eq $null)
{
Write-Output("The Azure VM with Name- $EdgeVMName is not present in the Resource Group- $ResourceGroup ")
$SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix
$Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroup -Location $location -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet
$publicIp = New-AzPublicIpAddress -Name $publicIpName -ResourceGroupName $ResourceGroup -AllocationMethod Static -Location $location
$NIC = New-AzNetworkInterface -Name $NICName -ResourceGroupName $ResourceGroup -Location $location -SubnetId $Vnet.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id -PublicIpAddressId $publicIp.Id
##Set-AzNetworkInterfaceIpConfig -Name "ipconfig1" -NetworkInterface $NIC -PublicIpAddress $publicIp
$Credential = New-Object System.Management.Automation.PSCredential ($AdminAcc, $AdminPassword);
$VirtualMachine = New-AzVMConfig -VMName $EdgeDeviceId -VMSize $VMSize
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Linux -ComputerName $EdgeDeviceId -Credential $Credential
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $imagePublisher -Offer $imageOffer -Skus $imageSku -Version latest
$VirtualMachine = Set-AzVMPlan -VM $VirtualMachine -Name $imageSku -Publisher $imagePublisher -Product $imageOffer
$AzVM = New-AzVM -ResourceGroupName $ResourceGroup -Location $location -VM $VirtualMachine -Verbose
$AzVM = Get-AzVM -ResourceGroupName $ResourceGroup -Name $EdgeDeviceId
}
else
{
Write-Output ("The Azure VM with Name- $EdgeDeviceId is present in the Resource Group- $ResourceGroup ")
}
$iotHub = Get-AzIotHub -ResourceGroupName $ResourceGroup -Name $IoTHubName
If($iotHub -eq $null)
{
Write-Output("IoTHub $IoTHubName does not exists, creating The IoTHub in the resource group $ResourceGroup")
New-AzIotHub -ResourceGroupName $ResourceGroup -Name $IoTHubName -SkuName $IoTHubSkuName -Units $IoTHubUnits -Location $location -Verbose
}
else
{
Write-Output ("IoTHub $IoTHubName present in the resource group $ResourceGroup")
}
$IoTHubSkuName = "S1"
$IoTHubUnits = 4
$EdgeDeviceId = "IronOrePredictionDevice"
$publicIpName = "VMPublicIP"
$imageOffer = "iot_edge_vm_ubuntu"
$imagePublisher = "microsoft_iot_edge"
$imageSku = "ubuntu_1604_edgeruntimeonly"
$AdminAcc = "iotadmin"
$AdminPassword = ConvertTo-SecureString "<password>" -AsPlainText -Force
$VMSize = "Standard_DS3"
$NetworkName = "MyNet"
$NICName = "MyNIC"
$SubnetName = "MySubnet"
$SubnetAddressPrefix = "10.0.0.0/24"
$VnetAddressPrefix = "10.0.0.0/16"
$MyWorkSpace = "SQLDatabaseEdgeDemo"
$containerRegistryName = $ResourceGroup + "ContRegistry"
Select-AzSubscription -Subscription $SubscriptionName
az account set --subscription $SubscriptionName
$rg = Get-AzResourceGroup -Name $ResourceGroup
if($rg -eq $null)
{
Write-Output("Resource Group $ResourceGroup does not exist, creating Resource Group")
New-AzResourceGroup -Name $ResourceGroup -Location $location
}
else
{
Write-Output ("Resource Group $ResourceGroup exists")
}
$sa = Get-AzStorageAccount -ResourceGroupName $ResourceGroup -Name $StorageAccountName
if ($sa -eq $null)
{
New-AzStorageAccount -ResourceGroupName $ResourceGroup -Name $StorageAccountName -SkuName Standard_LRS -Location $location -Kind Storage
$sa = Get-AzStorageAccount -ResourceGroupName $ResourceGroup -Name $StorageAccountName
$storageKey = Get-AzStorageAccountKey -ResourceGroupName $ResourceGroup -Name $StorageAccountName
$storageContext = New-AzStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $storageKey[0].Value
New-AzStorageContainer -Name "sqldatabasedacpac" -Context $storageContext
}
else
{
Write-Output ("Storage Account $StorageAccountName exists in Resource Group $ResourceGroup")
}
$containerRegistry = Get-AzContainerRegistry -ResourceGroupName $ResourceGroup -Name $containerRegistryName
if ($containerRegistry -eq $null)
{
New-AzContainerRegistry -ResourceGroupName $ResourceGroup -Name $containerRegistryName -Sku Standard -Location $location -EnableAdminUser
$containerRegistry = Get-AzContainerRegistry -ResourceGroupName $ResourceGroup -Name $containerRegistryName
}
else
{
Write-Output ("Container Registry $containerRegistryName exists in Resource Group $ResourceGroup")
}
$deviceIdentity = Get-AzIotHubDevice -ResourceGroupName $ResourceGroup -IotHubName $IoTHubName -DeviceId $EdgeDeviceId
If($deviceIdentity -eq $null)
{
Write-Output("The Edge Device with DeviceId- $EdgeDeviceId is not registered to the IoTHub- $IoTHubName ")
Add-AzIotHubDevice -ResourceGroupName $ResourceGroup -IotHubName $IoTHubName -DeviceId $EdgeDeviceId -EdgeEnabled
}
else
{
Write-Output ("The Edge Device with DeviceId- $EdgeDeviceId is registered to the IoTHub- $IoTHubName")
}
$deviceIdentity = Get-AzIotHubDevice -ResourceGroupName $ResourceGroup -IotHubName $IoTHubName -DeviceId $EdgeDeviceId
$deviceConnectionString = az iot hub device-identity connection-string show --device-id $EdgeDeviceId --hub-name $IoTHubName --resource-group $ResourceGroup --subscription $SubscriptionName
$connString = $deviceConnectionString[1].Substring(23,$deviceConnectionString[1].Length-24)
$connString