Key Best Practices
1. Use the Latest Az Module
Always install the most recent Az module to benefit from security patches and new cmdlets.
Install-Module -Name Az -AllowClobber -Scope CurrentUser
2. Prefer WhatIf and Confirm Parameters
During development, add -WhatIf or -Confirm to preview actions without making changes.
Remove-AzResourceGroup -Name MyResourceGroup -WhatIf
3. Secure Credential Handling
Never hard‑code credentials. Use Connect-AzAccount with managed identities or Azure AD service principals.
$sp = Get-AzADServicePrincipal -DisplayName "MyApp"
Connect-AzAccount -ServicePrincipal -ApplicationId $sp.ApplicationId -Tenant $sp.TenantId -CertificateThumbprint "YOUR_CERT_THUMBPRINT"
4. Implement Idempotent Scripts
Design scripts that can be re‑run safely. Check for existence before creating resources.
if (-not (Get-AzResourceGroup -Name $rgName -ErrorAction SilentlyContinue)) {
New-AzResourceGroup -Name $rgName -Location $location
}
5. Use Structured Logging
Output JSON logs for better integration with monitoring tools.
$log = @{
Time = (Get-Date).ToString("o")
Action = "CreateVM"
Status = "Success"
}
$log | ConvertTo-Json | Out-File "deployment.log" -Append
6. Parameter Validation
Validate script parameters to catch errors early.
param(
[Parameter(Mandatory)][ValidateNotNullOrEmpty()][string]$ResourceGroup,
[Parameter(Mandatory)][ValidatePattern('^[a-z0-9-]{3,24}$')][string]$VmName
)
7. Leverage Parallelism
Use ForEach-Object -Parallel (PowerShell 7+) for concurrent operations.
$vms = @('vm1','vm2','vm3')
$vms | ForEach-Object -Parallel {
Start-AzVM -Name $_ -ResourceGroupName "MyRG"
}