Vad om-åtgärd för Bicep-distribution
Innan du distribuerar en Bicep-fil kan du förhandsgranska de ändringar som kommer att ske. Azure Resource Manager innehåller vad om-åtgärden så att du kan se hur resurser kommer att ändras om du distribuerar Bicep-filen. Konsekvensgranskningen ändrar inga befintliga resurser. I stället förutsäger den ändringarna om den angivna Bicep-filen distribueras.
Du kan använda vad om-åtgärden med Azure PowerShell, Azure CLI eller REST API åtgärder. What-if stöds för distributioner på resursgrupps-, prenumerations-, hanteringsgrupps- och klientorganisationsnivå.
Microsoft Learn
Mer information om vad om-åtgärden och praktisk vägledning finns i Förhandsgranska ändringar i Azure-distributionen med hjälp av vad om på Microsoft Learn.
Installera Azure PowerShell modul
Om du vill använda vad om i PowerShell måste du ha version 4.2 eller senare av Az-modulen.
Om du vill installera modulen använder du:
Install-Module -Name Az -Force
Mer information om hur du installerar moduler finns i Installera Azure PowerShell.
Installera Azure CLI-modulen
Om du vill använda vad om i Azure CLI måste du ha Azure CLI 2.14.0 eller senare. Installera den senaste versionen av Azure CLI om det behövs.
Visa resultat
När du använder vad om i PowerShell eller Azure CLI innehåller utdata färgkodade resultat som hjälper dig att se de olika typerna av ändringar.

Textutdata är:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Anteckning
Vad om-åtgärden kan inte matcha referensfunktionen. Varje gång du ställer in en egenskap till ett malluttryck som innehåller referensfunktionen ändras vad om rapporterar egenskapen. Det här beteendet inträffar eftersom vad om jämför det aktuella värdet för egenskapen (till exempel eller för ett booleskt värde) med det olösta true false malluttrycket. Dessa värden kommer naturligtvis inte att matcha. När du distribuerar Bicep-filen ändras egenskapen endast när malluttrycket matchas till ett annat värde.
What-if-kommandon
Azure PowerShell
Om du vill förhandsgranska ändringar innan du distribuerar en Bicep-fil använder du New-AzResourceGroupDeployment eller New-AzSubscriptionDeployment. Lägg till -Whatif växlingsparametern i distributionskommandot.
New-AzResourceGroupDeployment -Whatifför distributioner av resursgrupperNew-AzSubscriptionDeployment -WhatifochNew-AzDeployment -Whatifför distributioner på prenumerationsnivå
Du kan använda -Confirm växlingsparametern för att förhandsgranska ändringarna och uppmanas att fortsätta med distributionen.
New-AzResourceGroupDeployment -Confirmför distributioner av resursgrupperNew-AzSubscriptionDeployment -ConfirmochNew-AzDeployment -Confirmför distributioner på prenumerationsnivå
Föregående kommandon returnerar en textsammanfattning som du kan granska manuellt. Om du vill hämta ett objekt som du kan kontrollera programmässigt för ändringar använder du Get-AzResourceGroupDeploymentWhatIfResult eller Get-AzSubscriptionDeploymentWhatIfResult.
$results = Get-AzResourceGroupDeploymentWhatIfResultför distributioner av resursgrupper$results = Get-AzSubscriptionDeploymentWhatIfResulteller$results = Get-AzDeploymentWhatIfResultför distributioner på prenumerationsnivå
Azure CLI
Om du vill förhandsgranska ändringar innan du distribuerar en Bicep-fil använder du:
- az deployment group what-if for resource group deployments
- az deployment sub what-if for subscription level deployments
- az deployment mg what-if for management group deployments
- az deployment tenant what-if for tenant deployments
Du kan använda --confirm-with-what-if växeln (eller dess kortform ) för -c att förhandsgranska ändringarna och uppmanas att fortsätta med distributionen. Lägg till den här växeln i:
- az deployment group create
- az deployment sub create.
- az deployment mg create
- az deployment tenant create
Du kan till exempel az deployment group create --confirm-with-what-if använda -c eller för distributioner av resursgrupper.
Föregående kommandon returnerar en textsammanfattning som du kan granska manuellt. Om du vill hämta ett JSON-objekt som du kan kontrollera programmatiskt för ändringar använder du --no-pretty-print växeln . Använd till exempel az deployment group what-if --no-pretty-print för resursgruppsdistributioner.
Om du vill returnera resultatet utan färger öppnar du Azure CLI-konfigurationsfilen. Ange no_color till ja.
REST-API för Azure
För REST API använder du:
- Distributioner – What If för distributioner av resursgrupper
- Distributioner – What If prenumerationsomfång för prenumerationsdistributioner
- Distributioner – What If Omfång för hanteringsgrupp för distributioner av hanteringsgrupp
- Distributioner – What If klientorganisationsomfång för klientdistributioner.
Ändringstyper
Vad om-åtgärden visar sex olika typer av ändringar:
- Skapa: Resursen finns inte för närvarande men definieras i Bicep-filen. Resursen skapas.
- Ta bort: Den här ändringstypen gäller endast när du använder fullständigt läge för JSON-malldistribution. Resursen finns, men är inte definierad i Bicep-filen. I fullständigt läge tas resursen bort. Endast resurser som stöder borttagning i fullständigt läge ingår i den här ändringstypen.
- Ignorera: Resursen finns, men har inte definierats i Bicep-filen. Resursen kommer inte att distribueras eller ändras.
- NoChange: Resursen finns och definieras i Bicep-filen. Resursen distribueras på nytt, men egenskaperna ändras inte. Den här ändringstypen returneras när ResultFormat är inställt
FullResourcePayloadspå , vilket är standardvärdet. - Ändra: Resursen finns och definieras i Bicep-filen. Resursen distribueras på nytt och resursens egenskaper ändras. Den här ändringstypen returneras när ResultFormat är inställt
FullResourcePayloadspå , vilket är standardvärdet. - Distribuera: Resursen finns och definieras i Bicep-filen. Resursen distribueras på nytt. Egenskaperna för resursen ändras eventuellt. Åtgärden returnerar den här ändringstypen när det inte finns tillräckligt med information för att avgöra om några egenskaper kommer att ändras. Du ser bara det här villkoret när ResultFormat är inställt på
ResourceIdOnly.
Resultatformat
Du styr detaljnivån som returneras om de förutsagda ändringarna. Du kan välja mellan två alternativ:
- FullResourcePayloads – returnerar en lista över resurser som kommer att ändras och information om de egenskaper som kommer att ändras
- ResourceIdOnly – returnerar en lista över resurser som kommer att ändras
Standardvärdet är FullResourcePayloads.
För PowerShell-distributionskommandon använder du -WhatIfResultFormat parametern . Använd parametern i programmatiska ResultFormat objektkommandon.
För Azure CLI använder du --result-format parametern .
Följande resultat visar de två olika utdataformaten:
Fullständiga resursnyttolaster
Resource and property changes are indicated with these symbols: - Delete + Create ~ Modify The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01] - tags.Owner: "Team A" ~ properties.addressSpace.addressPrefixes: [ - 0: "10.0.0.0/16" + 0: "10.0.0.0/15" ] ~ properties.subnets: [ - 0: name: "subnet001" properties.addressPrefix: "10.0.0.0/24" ] Resource changes: 1 to modify.Endast resurs-ID
Resource and property changes are indicated with this symbol: ! Deploy The deployment will update the following scope: Scope: /subscriptions/./resourceGroups/ExampleGroup ! Microsoft.Network/virtualNetworks/vnet-001 Resource changes: 1 to deploy.
Köra vad om-åtgärd
Konfigurera miljö
För att se hur vad om fungerar kör vi några tester. Distribuera först en Bicep-fil som skapar ett virtuellt nätverk. Du använder det här virtuella nätverket för att testa hur ändringar rapporteras av vad om. Ladda ned en kopia av Bicep-filen.
resource vnet 'Microsoft.Network/virtualNetworks@2021-02-01' = {
name: 'vnet-001'
location: resourceGroup().location
tags: {
CostCenter: '12345'
Owner: 'Team A'
}
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
enableVmProtection: false
enableDdosProtection: false
subnets: [
{
name: 'subnet001'
properties: {
addressPrefix: '10.0.0.0/24'
}
}
{
name: 'subnet002'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
}
}
Om du vill distribuera Bicep-filen använder du:
New-AzResourceGroup `
-Name ExampleGroup `
-Location centralus
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-before.bicep"
Testa ändring
När distributionen är klar är du redo att testa vad om-åtgärden. Den här gången distribuerar du en Bicep-fil som ändrar det virtuella nätverket. Det saknas en av de ursprungliga taggarna, ett undernät har tagits bort och adressprefixet har ändrats. Ladda ned en kopia av Bicep-filen.
resource vnet 'Microsoft.Network/virtualNetworks@2021-02-01' = {
name: 'vnet-001'
location: resourceGroup().location
tags: {
CostCenter: '12345'
}
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/15'
]
}
enableVmProtection: false
enableDdosProtection: false
subnets: [
{
name: 'subnet002'
properties: {
addressPrefix: '10.0.1.0/24'
}
}
]
}
}
Om du vill visa ändringarna använder du:
New-AzResourceGroupDeployment `
-Whatif `
-ResourceGroupName ExampleGroup `
-TemplateFile "what-if-after.bicep"
Utdata från konsekvensgranskningen bör se ut ungefär så här:

Textutdata är:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
+ properties.enableVmProtection: false
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Observera att färger definieras överst i utdata för att ange typen av ändringar.
Längst ned i utdata visas taggen Ägare har tagits bort. Adressprefixet ändrades från 10.0.0.0/16 till 10.0.0.0/15. Undernätet med namnet subnet001 har tagits bort. Kom ihåg att dessa ändringar inte har distribuerats. Du ser en förhandsgranskning av de ändringar som kommer att ske om du distribuerar Bicep-filen.
Vissa av de egenskaper som visas som borttagna ändras inte i själva verket. Egenskaper kan felaktigt rapporteras som borttagna när de inte finns i Bicep-filen, men ställs automatiskt in under distributionen som standardvärden. Det här resultatet betraktas som "brus" i svaret "vad om". Den slutliga distribuerade resursen har värdena inställda för egenskaperna. När vad om-åtgärden mognar filtreras dessa egenskaper bort från resultatet.
Utvärdera vad om-resultat programmässigt
Nu ska vi programmatiskt utvärdera vad om-resultatet genom att ange kommandot till en variabel.
$results = Get-AzResourceGroupDeploymentWhatIfResult `
-ResourceGroupName ExampleGroup `
--template-file "what-if-after.bicep"
Du kan se en sammanfattning av varje ändring.
foreach ($change in $results.Changes)
{
$change.Delta
}
Bekräfta borttagning
Om du vill förhandsgranska ändringar innan du distribuerar en Bicep-fil använder du växelparametern confirm med distributionskommandot. Om ändringarna är som förväntat svarar du att du vill att distributionen ska slutföras.
New-AzResourceGroupDeployment `
-ResourceGroupName ExampleGroup `
-Confirm `
-TemplateFile "what-if-after.bicep"

Textutdata är:
Resource and property changes are indicated with these symbols:
- Delete
+ Create
~ Modify
The deployment will update the following scope:
Scope: /subscriptions/./resourceGroups/ExampleGroup
~ Microsoft.Network/virtualNetworks/vnet-001 [2018-10-01]
- tags.Owner: "Team A"
+ properties.enableVmProtection: false
~ properties.addressSpace.addressPrefixes: [
- 0: "10.0.0.0/16"
+ 0: "10.0.0.0/15"
]
~ properties.subnets: [
- 0:
name: "subnet001"
properties.addressPrefix: "10.0.0.0/24"
]
Resource changes: 1 to modify.
Are you sure you want to execute the deployment?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Du ser de förväntade ändringarna och kan bekräfta att du vill att distributionen ska köras.
Rensa resurser
När du inte längre behöver exempelresurserna kan du använda Azure CLI eller Azure PowerShell för att ta bort resursgruppen.
az group delete --name ExampleGroup
SDK:er
Du kan använda vad om-åtgärden via Azure-SDK:erna.
För Python använder du vad om.
För Java använder du DeploymentWhatIf-klassen.
För .NET använder du DeploymentWhatIf-klassen.
Nästa steg
- Information om hur du använder vad om-åtgärden i en pipeline finns i Testa ARM-mallar med What-If i en pipeline.
- Om du ser felaktiga resultat från vad om-åtgärden kan du rapportera problemen på https://aka.ms/whatifissues .
- En modul Microsoft Learn som beskriver hur du använder vad om finns i Förhandsgranska ändringar och validera Azure-resurser med hjälp av vad om och ARM-mallens testverktyg.