====== Azure Powershell (QnD) ======
====== Common Commands ======
==== Connect and Select ====
Authenticate with Azure, list subscriptions for tenants and select a subscription to work with.
Connect-AzAccount -Tenant
Get-AzSubscription
Select-AzSubscription -SubscriptionId
====== Command Context ======
Get Azure tenants that there is an authenticated session for.
Get-AzTenant | select id,name
==== See and set current context for Azure Powershell commands ====
This shows subscription and tenant info for current connections.
Get-AzContext -ListAvailable | fl
Set-AzContext -Tenant "xyz"
Set-AzContext -Subscription "xyz"
==== Remove item from available context ====
(Get-AzContext -ListAvailable).Name
Remove-Context -Name
====== Get Resources ======
List all resources in the current subscription.
Get-AzResource
Get-AzResource | select Name,Type,ResourceGroupName,SubscriptionId | Export-Csv resources.csv
====== Loop Over All Subscriptions ======
Loop over all subscriptions in a tenant and run some command against them.
foreach ($sub in Get-AzSubscription -TenantId "xyz") {
Write-Host $sub.id
}
=== Example ===
Example of getting creation/last update timestamp for all custom policy definitions.
foreach ($sub in Get-AzSubscription -TenantId "xyz") {
Get-AzPolicyDefinition -SubscriptionId $sub.id | select -ExpandProperty Properties | where {$_.PolicyType -eq "Custom"} | select DisplayName -ExpandProperty Metadata | select DisplayName, createdOn, updatedOn | fl
}
Loop over all subscriptions in a tenant and for each subscription run some commands.
foreach ($sub in Get-AzSubscription -TenantId "xyz") {
Set-AzContext -Subscription $sub.id | Out-Null
#
# Other commands
#
}
Set-AzContext -Tenant "xyz"
foreach ($sub in Get-AzSubscription) {
Set-AzContext -Subscription $sub.id | Out-Null
#
# Other commands
#
}
====== Loop Over Resource Groups ======
Get-AzResourceGroup | foreach {
$_.ResourceGroupName
#
# Do something with RG info
#
}
====== List Policy Assignments ======
Set-AzContext -Tenant "xxxx…"
foreach ($sub in Get-AzSubscription) {
Set-AzContext -Subscription $sub.Id
$p += Get-AzPolicyAssignment
}
$p | select -ExpandProperty Properties | select DisplayName,Scope
====== List All Extension on VMs ======
function AvGet-VMExtensions ($TenantId) {
$extList = @()
foreach ($sub in Get-AzSubscription -TenantId $TenantId) {
Get-AzVM | foreach {
$vm = $_.Name
$ext = Get-AzVMExtension -VMName $_.Name -ResourceGroupName $_.ResourceGroupName
$ext | foreach {
$obj = [PSCustomObject]@{
Name = $vm
ExtName = $_.Name
}
$extList += $obj
}
$extList | Format-Table -AutoSize
}
$extList | Tee-Object $env:tmp\vm-exts.txt
}
}
====== List Subnets with no associated NSG ======
foreach ($sub in Get-AzSubscription -TenantId "xxxx") {
Set-AzContext -Subscription $sub.id | Out-Null
(Get-AzVirtualNetwork | foreach {$_.Subnets} | where {$_.NetworkSecurityGroup -eq $null}).Name
}
====== Enumerating Resources ======
=== § ===
$azResources = Get-AzResource
$azResources | foreach {
$_.ResourceId
}
=== § ===
Get-AzResourceGroup | foreach {Get-AzStorageAccount -ResourceGroupName $_.ResourceGroupName}
====== Related ======
* [[:powershell|Powershell]]