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
⚠️
windows_tools
⚠️
missing_linux_example
Summary:
The documentation demonstrates a strong Windows and PowerShell bias. Most examples and workflows are described using PowerShell scripts and cmdlets, with Linux instructions often being secondary, less detailed, or requiring use of Windows tools (e.g., generating metaconfigurations on Windows). Windows-specific tools and terminology (WMF 5, PowerShell DSC, Set-DscLocalConfigurationManager) are used throughout, and Linux workflows are often described as adaptations of the Windows process. Linux-specific examples are minimal, and Linux users are frequently directed to use Windows-based tooling for key steps.
Recommendations:
- Provide Linux-first and Linux-native examples for all major workflows, including onboarding, metaconfiguration generation, and status checking.
- Document how to generate DSC metaconfigurations entirely on Linux, without requiring Windows or PowerShell.
- Where possible, use cross-platform tools or clearly indicate platform-specific steps, offering parity in detail and clarity.
- Include bash or Python scripts for Linux alongside PowerShell scripts for Windows.
- Clarify when a feature or cmdlet is Windows-only, and offer Linux alternatives or workarounds.
- Reorganize sections so that Linux and Windows instructions are presented with equal prominence and detail.
Create pull request
Flagged Code Snippets
Set-DscLocalConfigurationManager -Path ./DscMetaConfigs
Set-DscLocalConfigurationManager -Path $env:UserProfile\Desktop\DscMetaConfigs
# The DSC configuration that will generate metaconfigurations
[DscLocalConfigurationManager()]
Configuration DscMetaConfigs
{
param
(
[Parameter(Mandatory=$True)]
[String]$RegistrationUrl,
[Parameter(Mandatory=$True)]
[String]$RegistrationKey,
[Parameter(Mandatory=$True)]
[String[]]$ComputerName,
[Int]$RefreshFrequencyMins = 30,
[Int]$ConfigurationModeFrequencyMins = 15,
[String]$ConfigurationMode = 'ApplyAndMonitor',
[String]$NodeConfigurationName,
[Boolean]$RebootNodeIfNeeded= $False,
[String]$ActionAfterReboot = 'ContinueConfiguration',
[Boolean]$AllowModuleOverwrite = $False,
[Boolean]$ReportOnly
)
if(!$NodeConfigurationName -or $NodeConfigurationName -eq '')
{
$ConfigurationNames = $null
}
else
{
$ConfigurationNames = @($NodeConfigurationName)
}
if($ReportOnly)
{
$RefreshMode = 'PUSH'
}
else
{
$RefreshMode = 'PULL'
}
Node $ComputerName
{
Settings
{
RefreshFrequencyMins = $RefreshFrequencyMins
RefreshMode = $RefreshMode
ConfigurationMode = $ConfigurationMode
AllowModuleOverwrite = $AllowModuleOverwrite
RebootNodeIfNeeded = $RebootNodeIfNeeded
ActionAfterReboot = $ActionAfterReboot
ConfigurationModeFrequencyMins = $ConfigurationModeFrequencyMins
}
if(!$ReportOnly)
{
ConfigurationRepositoryWeb AzureAutomationStateConfiguration
{
ServerUrl = $RegistrationUrl
RegistrationKey = $RegistrationKey
ConfigurationNames = $ConfigurationNames
}
ResourceRepositoryWeb AzureAutomationStateConfiguration
{
ServerUrl = $RegistrationUrl
RegistrationKey = $RegistrationKey
}
}
ReportServerWeb AzureAutomationStateConfiguration
{
ServerUrl = $RegistrationUrl
RegistrationKey = $RegistrationKey
}
}
}
# Create the metaconfigurations
# NOTE: DSC Node Configuration names are case sensitive in the portal.
# TODO: edit the below as needed for your use case
$Params = @{
RegistrationUrl = '<fill me in>';
RegistrationKey = '<fill me in>';
ComputerName = @('<some VM to onboard>', '<some other VM to onboard>');
NodeConfigurationName = 'SimpleConfig.webserver';
RefreshFrequencyMins = 30;
ConfigurationModeFrequencyMins = 15;
RebootNodeIfNeeded = $False;
AllowModuleOverwrite = $False;
ConfigurationMode = 'ApplyAndMonitor';
ActionAfterReboot = 'ContinueConfiguration';
ReportOnly = $False; # Set to $True to have machines only report to AA DSC but not pull from it
}
# Use PowerShell splatting to pass parameters to the DSC configuration being invoked
# For more info about splatting, run: Get-Help -Name about_Splatting
DscMetaConfigs @Params
# Define the parameters for Get-AzAutomationDscOnboardingMetaconfig using PowerShell Splatting
$Params = @{
ResourceGroupName = 'ContosoResources' # The Resource Group that contains your Azure Automation account
AutomationAccountName = 'ContosoAutomation'; # The Azure Automation account where you want to onboard the node
ComputerName = @('web01', 'web02', 'sql01'); # The computers to generate the metaconfigurations for
OutputFolder = "$env:UserProfile\Desktop\";
}
# Use PowerShell splatting to pass parameters to the Azure Automation cmdlet being invoked
# For more info about splatting, run: Get-Help -Name about_Splatting
Get-AzAutomationDscOnboardingMetaconfig @Params
Set-DscLocalConfigurationManager -Path C:\Users\joe\Desktop\DscMetaConfigs -ComputerName MyServer1, MyServer2
$SecurePass = ConvertTo-SecureString -String '<root password>' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential 'root', $SecurePass
$Opt = New-CimSessionOption -UseSsl -SkipCACheck -SkipCNCheck -SkipRevocationCheck
# need a CimSession for each Linux machine to onboard
$Session = New-CimSession -Credential $Cred -ComputerName <your Linux machine> -Port 5986 -Authentication basic -SessionOption $Opt
Set-DscLocalConfigurationManager -CimSession $Session -Path C:\Users\joe\Desktop\DscMetaConfigs