How to prevent the delivery of costly VMs (Azure)

This article has not been completed yet. However, it may already contain   helpful Information and therefore it has been published at this stage.

Definition:

# Query VM - SKUs (A-,B-,D- Series with no more than 8 Cores):
(Get-AzVMSize -Location "westeurope" | Where {$_.NumberOfCores -le 8} | Where {$_.Name -match "Standard_A" -or $_.Name -mat[h "Standard_B" -or $_.Name -match "Standard_D"} | Where {$_.Name -notmatch "Promo"} | select -expandproperty  Name) | convertto-json

# Result:
[
  "Standard_B1ls",
  "Standard_B1ms",
  "Standard_B1s",
  "Standard_B2ms",
  "Standard_B2s",
  "Standard_B4ms",
  "Standard_B8ms",
  "Standard_D1_v2",
  "Standard_D2_v2",
  "Standard_D3_v2",
  "Standard_D4_v2",
  "Standard_D11_v2",
  "Standard_D12_v2",
  "Standard_D13_v2",
  "Standard_DS1_v2",
  "Standard_DS2_v2",
  "Standard_DS3_v2",
  "Standard_DS4_v2",
  "Standard_DS11-1_v2",
  "Standard_DS11_v2",
  "Standard_DS12-1_v2",
  "Standard_DS12-2_v2",
  "Standard_DS12_v2",
  "Standard_DS13-2_v2",
  "Standard_DS13-4_v2",
  "Standard_DS13_v2",
  "Standard_A1_v2",
  "Standard_A2m_v2",
  "Standard_A2_v2",
  "Standard_A4m_v2",
  "Standard_A4_v2",
  "Standard_A8m_v2",
  "Standard_A8_v2",
  "Standard_D2_v3",
  "Standard_D4_v3",
  "Standard_D8_v3",
  "Standard_D2s_v3",
  "Standard_D4s_v3",
  "Standard_D8s_v3",
  "Standard_D2a_v4",
  "Standard_D4a_v4",
  "Standard_D8a_v4",
  "Standard_D2as_v4",
  "Standard_D4as_v4",
  "Standard_D8as_v4",
  "Standard_D2as_v5",
  "Standard_D4as_v5",
  "Standard_D8as_v5",
  "Standard_D2ads_v5",
  "Standard_D4ads_v5",
  "Standard_D8ads_v5",
  "Standard_D2ds_v4",
  "Standard_D4ds_v4",
  "Standard_D8ds_v4",
  "Standard_D2ds_v5",
  "Standard_D4ds_v5",
  "Standard_D8ds_v5",
  "Standard_D2d_v4",
  "Standard_D4d_v4",
  "Standard_D8d_v4",
  "Standard_D2d_v5",
  "Standard_D4d_v5",
  "Standard_D8d_v5",
  "Standard_D2s_v4",
  "Standard_D4s_v4",
  "Standard_D8s_v4",
  "Standard_D2s_v5",
  "Standard_D4s_v5",
  "Standard_D8s_v5",
  "Standard_D2_v4",
  "Standard_D4_v4",
  "Standard_D8_v4",
  "Standard_D2_v5",
  "Standard_D4_v5",
  "Standard_D8_v5",
  "Standard_D2ls_v5",
  "Standard_D4ls_v5",
  "Standard_D8ls_v5",
  "Standard_D2lds_v5",
  "Standard_D4lds_v5",
  "Standard_D8lds_v5",
  "Standard_B2ls_v2",
  "Standard_B2s_v2",
  "Standard_B2ts_v2",
  "Standard_B4ls_v2",
  "Standard_B4s_v2",
  "Standard_B8ls_v2",
  "Standard_B8s_v2",
  "Standard_A0",
  "Standard_A1",
  "Standard_A2",
  "Standard_A3",
  "Standard_A5",
  "Standard_A4",
  "Standard_A6",
  "Standard_A7",
  "Standard_D1",
  "Standard_D2",
  "Standard_D3",
  "Standard_D4",
  "Standard_D11",
  "Standard_D12",
  "Standard_D13",
  "Standard_DS1",
  "Standard_DS2",
  "Standard_DS3",
  "Standard_DS4",
  "Standard_DS11",
  "Standard_DS12",
  "Standard_DS13",
  "Standard_B2als_v2",
  "Standard_B2as_v2",
  "Standard_B2ats_v2",
  "Standard_B4als_v2",
  "Standard_B4as_v2",
  "Standard_B8als_v2",
  "Standard_B8as_v2",
  "Standard_D2plds_v5",
  "Standard_D4plds_v5",
  "Standard_D8plds_v5",
  "Standard_D2pls_v5",
  "Standard_D4pls_v5",
  "Standard_D8pls_v5",
  "Standard_D2pds_v5",
  "Standard_D4pds_v5",
  "Standard_D8pds_v5",
  "Standard_D2ps_v5",
  "Standard_D4ps_v5",
  "Standard_D8ps_v5",
  "Standard_B2pls_v2",
  "Standard_B2ps_v2",
  "Standard_B2pts_v2",
  "Standard_B4pls_v2",
  "Standard_B4ps_v2",
  "Standard_B8pls_v2",
  "Standard_B8ps_v2",
  "Standard_DC8_v2",
  "Standard_DC1s_v2",
  "Standard_DC2s_v2",
  "Standard_DC4s_v2",
  "Standard_DC2s",
  "Standard_DC4s",
  "Standard_DC2as_v5",
  "Standard_DC4as_v5",
  "Standard_DC8as_v5",
  "Standard_DC2ads_v5",
  "Standard_DC4ads_v5",
  "Standard_DC8ads_v5",
  "Standard_DC4as_cc_v5",
  "Standard_DC8as_cc_v5",
  "Standard_DC4ads_cc_v5",
  "Standard_DC8ads_cc_v5",
  "Standard_DC1s_v3",
  "Standard_DC2s_v3",
  "Standard_DC4s_v3",
  "Standard_DC8s_v3",
  "Standard_DC1ds_v3",
  "Standard_DC2ds_v3",
  "Standard_DC4ds_v3",
  "Standard_DC8ds_v3"
]

Assignment:

az policy state trigger-scan

Result:

References:

How to check the available VM Sizes (SKUs) by Azure Region