對於 Azure 資源編寫陣列屬性的原則
Azure Resource Manager 屬性通常會定義為字串和布林值。 存在一對多關聯性時,複雜屬性會改為定義為陣列。 在 Azure 原則中,能夠以多種不同的方式使用陣列:
本文涵蓋 Azure 原則的每個使用方式,並提供數個範例定義。
參數陣列
定義參數陣列
將參數定義為陣列,可在需要一個以上的值時,允許原則彈性。 此原則定義允許 allowedLocations 參數的任何單一位置,並預設為 eastus2:
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
由於類型為字串,因此指派原則時只能設定一個值。 如果指派此原則,則範圍內的資源只能在單一 Azure 區域中使用。 大部分的原則定義都必須允許已核准的選項清單,例如允許 eastus2、eastus 和 westus2。
若要建立原則定義以允許多個選項,請使用「陣列」類型。 相同的原則可以改寫如下:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"eastus2"
],
"allowedValues": [
"eastus2",
"eastus",
"westus2"
]
}
}
注意
一旦儲存原則定義之後,就無法變更參數上的類型屬性。
這個新的參數定義會在原則指派期間接受一個以上的值。 陣列屬性 allowedValues 定義完畢後,指派期間可用的值會進一步限制為預先定義的選項清單。 使用 allowedValues 為選擇性。
於指派期間將值傳遞給參數陣列
透過 Azure 入口網站指派原則時,類型「陣列」的參數會顯示為單一文字方塊。 提示顯示「請使用 ; 來分隔值。 (例如倫敦;紐約)」。 若要將 eastus2、eastus 和 westus2 允許的位置值傳遞給參數,請使用下列字串:
eastus2;eastus;westus2
使用 Azure CLI、Azure PowerShell 或 REST API 時,參數值的格式會不同。 這些值會透過同時包含參數名稱的 JSON 字串傳遞。
{
"allowedLocations": {
"value": [
"eastus2",
"eastus",
"westus2"
]
}
}
若要將此字串與每個 SDK 搭配使用,請使用下列命令:
- Azure CLI:命令 az policy assignment create 搭配參數 params
- Azure PowerShell:Cmdlet New-AzPolicyAssignment 搭配參數 PolicyParameter
- REST API:PUT 中屬於要求本文的 properties.parameters 屬性值 create 作業
在條件中使用陣列
In 和 notIn
in
和 notIn
條件只適用於陣列值。 它們會檢查陣列中是否有值。 陣列可以是常值 JSON 陣列或陣列參數的參考。 例如:
{
"field": "tags.environment",
"in": [ "dev", "test" ]
}
{
"field": "location",
"notIn": "[parameters('allowedLocations')]"
}
值計數
值計數運算式會計算有多少陣列成員符合條件。 該運算式所提供的方式可使用每個反覆項目上的不同值,來多次運算相同條件。 例如,下列條件會檢查資源名稱是否符合來自模式陣列的任何模式:
{
"count": {
"value": [ "test*", "dev*", "prod*" ],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
為了評估運算式,Azure 原則會評估 where
條件三次,每個 [ "test*", "dev*", "prod*" ]
成員皆須評估一次,以計算其得出 true
的次數。 在每個反覆項目上,目前陣列成員的值會按照 count.name
所定義的 pattern
索引名稱配對。 接著,您可以呼叫特殊的範本函式,在 where
條件內參考此值:current('pattern')
。
反覆運算 | current('pattern') 傳回值 |
---|---|
1 | "test*" |
2 | "dev*" |
3 | "prod*" |
只有在結果計數大於 0 時,條件才為 true。
若要讓上述條件更泛型,請使用參數參考,而非常值陣列:
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
當值計數運算式不在任何其他計數運算式底下時,count.name
是選擇性且可在沒有任何引數的情況下使用 current()
函式:
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
值計數也支援複雜物件的陣列,且允許更複雜的條件。 例如,下列條件會為每個名稱模式定義所需的標籤值,並檢查資源名稱是否符合該模式,但沒有必要的標籤值:
{
"count": {
"value": [
{ "pattern": "test*", "envTag": "dev" },
{ "pattern": "dev*", "envTag": "dev" },
{ "pattern": "prod*", "envTag": "prod" },
],
"name": "namePatternRequiredTag",
"where": {
"allOf": [
{
"field": "name",
"like": "[current('namePatternRequiredTag').pattern]"
},
{
"field": "tags.env",
"notEquals": "[current('namePatternRequiredTag').envTag]"
}
]
}
},
"greater": 0
}
如需實用範例,請參閱值計數範例。
參考陣列資源屬性
許多使用案例都需要在評估的資源中使用陣列屬性。 某些案例需要參考整個陣列 (例如檢查其長度)。 其他案例則需要將條件套用至各個別陣列成員 (例如,確保所有防火牆規則都會封鎖來自網際網路的存取)。 了解 Azure 原則參考資源屬性的不同方式,以及這些參考在參考陣列屬性時的行為,是撰寫涵蓋這些案例條件的關鍵。
參考資源屬性
Azure 原則可以使用別名參考資源屬性。您可以透過兩種方式參考 Azure 原則內的資源屬性值:
使用 [欄位] 條件來檢查所有指定的資源屬性是否符合條件。 範例:
{ "field" : "Microsoft.Test/resourceType/property", "equals": "value" }
使用
field()
函式來存取屬性值。 範例:{ "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]", "equals": "prefix_" }
欄位條件隱含「全部」行為。 如果別名代表值的集合,則會檢查所有個別值是否符合條件。 field()
函式會依原狀傳回別名所代表的值,然後其他範本函式即可操作。
參考陣列欄位
陣列資源屬性是以兩種不同類型的別名來表示。 已附加 [*]
的「正常」別名和陣列別名:
Microsoft.Test/resourceType/stringArray
Microsoft.Test/resourceType/stringArray[*]
參考陣列
第一個別名代表單一值,也就是要求內容中的 stringArray
屬性值。 因為該屬性的值是陣列,所以在原則條件中並不實用。 例如:
{
"field": "Microsoft.Test/resourceType/stringArray",
"equals": "..."
}
此條件會將整個 stringArray
陣列與單一字串值進行比較。 包括 equals
在內的大部分條件都只接受字串值,因此在比較陣列與字串時功用不大。 檢查陣列屬性是否存在時,便是參考陣列屬性的主要實用案例:
{
"field": "Microsoft.Test/resourceType/stringArray",
"exists": "true"
}
使用 field()
函式時,傳回的值是來自要求內容的陣列,然後您就可以將其與任何接受陣列引數的支援範本函式搭配使用。 例如,下列條件會檢查 stringArray
的長度是否大於 0:
{
"value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
"greater": 0
}
參考陣列成員集合
使用 [*]
語法的別名代表從陣列屬性選取的屬性值集合,這與選取陣列屬性本身不同。 在 Microsoft.Test/resourceType/stringArray[*]
的案例中,系統會傳回具所有 stringArray
成員的集合。 如先前所述,field
條件會檢查所有選取的資源屬性是否符合條件,因此只有在所有 stringArray
成員都等於「value」時,下列條件才為 true。
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
如果陣列是空的,則條件會評估為 true,因為陣列中沒有任何成員違規。 在此案例中,建議改用 count 運算式。 如果陣列包含物件,可以使用 [*]
別名從每個陣列成員中選取特定屬性值。 範例:
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value"
}
如果 objectArray
中所有 property
屬性的值都等於 "value"
,則此條件為 true。 如需更多範例,請參閱其他 [*] 別名範例。
使用 field()
函式來參考陣列別名時,傳回的值是所有選取值的陣列。 此行為表示 field()
函式的常見使用案例 (即將範本函式套用至資源屬性值的能力) 有限。 此案例中只可使用接受陣列引數的範本函式。 例如,可以透過 [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]
取得陣列長度。 不過,將範本函式套用至各陣列成員,並將其與所需值進行比較等更複雜的案例,只有在使用 count
運算式時才可執行。 如需詳細資訊,請參閱欄位計數運算式。
總而言之,請參閱下列範例資源內容,以及各種別名所傳回的選取值:
{
"tags": {
"env": "prod"
},
"properties":
{
"stringArray": [ "a", "b", "c" ],
"objectArray": [
{
"property": "value1",
"nestedArray": [ 1, 2 ]
},
{
"property": "value2",
"nestedArray": [ 3, 4 ]
}
]
}
}
在範例資源內容上使用欄位條件時,結果如下所示:
Alias | 選取的值 |
---|---|
Microsoft.Test/resourceType/missingArray |
null |
Microsoft.Test/resourceType/missingArray[*] |
值的空集合。 |
Microsoft.Test/resourceType/missingArray[*].property |
值的空集合。 |
Microsoft.Test/resourceType/stringArray |
["a", "b", "c"] |
Microsoft.Test/resourceType/stringArray[*] |
"a" 、"b" 、"c" |
Microsoft.Test/resourceType/objectArray[*] |
{ "property": "value1", "nestedArray": [ 1, 2 ] } ,{ "property": "value2", "nestedArray": [ 3, 4 ] } |
Microsoft.Test/resourceType/objectArray[*].property |
"value1" , "value2" |
Microsoft.Test/resourceType/objectArray[*].nestedArray |
[ 1, 2 ] , [ 3, 4 ] |
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] |
1 , 2 , 3 , 4 |
在範例資源內容上使用 field()
函式時,結果如下所示:
運算式 | 傳回值 |
---|---|
[field('Microsoft.Test/resourceType/missingArray')] |
"" |
[field('Microsoft.Test/resourceType/missingArray[*]')] |
[] |
[field('Microsoft.Test/resourceType/missingArray[*].property')] |
[] |
[field('Microsoft.Test/resourceType/stringArray')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/stringArray[*]')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/objectArray[*]')] |
[{ "property": "value1", "nestedArray": [ 1, 2 ] }, { "property": "value2", "nestedArray": [ 3, 4 ] }] |
[field('Microsoft.Test/resourceType/objectArray[*].property')] |
["value1", "value2"] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray')] |
[[ 1, 2 ], [ 3, 4 ]] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray[*]')] |
[1, 2, 3, 4] |
欄位計數運算式
欄位計數運算式會計算有多少陣列成員符合條件,並將計數與目標值進行比較。 與 field
條件相比,使用 Count
來運算陣列更直觀且靈活。 語法為:
{
"count": {
"field": <[*] alias>,
"where": <optional policy condition expression>
},
"equals|greater|less|any other operator": <target value>
}
在沒有 where
條件的情況下使用時,count
只會傳回陣列的長度。 沿用上一節的範例資源內容,下列 count
運算式會得出 true
,因為 stringArray
有三個成員:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]"
},
"equals": 3
}
此行為也適用於巢狀陣列。 例如,下列 count
運算式會得出 true
,因為 nestedArray
陣列中有四個陣列成員:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 4
}
count
的力量源自於 where
條件。 指定時,Azure 原則會列舉陣列成員,並根據條件評估每個成員,以計算得出 true
的陣列成員數目。 具體來說,在 where
條件評估的每個反覆運算中,Azure 原則會選取單一陣列成員 i,並根據 where
條件評估資源內容,就像 i 是陣列的唯一成員一樣。 每個反覆運算中只有一個陣列成員可用,可讓您在各個別陣列成員上套用複雜條件。
範例:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "a"
}
},
"equals": 1
}
為了評估 count
運算式,Azure 原則會評估 where
條件三次,每個 stringArray
成員皆須評估一次,以計算其得出 true
的次數。
當 where
條件參考 Microsoft.Test/resourceType/stringArray[*]
陣列成員,而非選取 stringArray
的所有成員時,系統每次只會選取單一陣列成員:
反覆運算 | 選取的 Microsoft.Test/resourceType/stringArray[*] 值 |
where 評估結果 |
---|---|---|
1 | "a" |
true |
2 | "b" |
false |
3 | "c" |
false |
count
會傳回 1
。
以下是更複雜的運算式:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value2"
},
{
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"greater": 2
}
]
}
},
"equals": 1
}
反覆運算 | 選取的值 | where 評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].property =>"value1" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
false |
2 | Microsoft.Test/resourceType/objectArray[*].property =>"value2" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
true |
count
會傳回 1
。
根據完整要求內容評估 where
運算式 (只會變更目前列舉的陣列成員),即代表 where
條件也可參考陣列外部的欄位:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"field": "tags.env",
"equals": "prod"
}
},
"equals": 0
}
反覆運算 | 選取的值 | where 評估結果 |
---|---|---|
1 | tags.env =>"prod" |
true |
2 | tags.env =>"prod" |
true |
巢狀計數運算式可用來將條件套用至巢狀陣列欄位。 例如,下列條件會檢查 objectArray[*]
陣列是否只有兩個具備 nestedArray[*]
且包含一個或多個成員的成員:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 1
}
},
"equals": 2
}
反覆運算 | 選取的值 | 巢狀計數評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] 有 2 個成員 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] 有 2 個成員 =>true |
由於 objectArray[*]
的兩個成員都有含兩個成員的子陣列 nestedArray[*]
,因此外部計數運算式會傳回 2
。
更複雜的範例:檢查 objectArray[*]
陣列是否只有兩個成員,其中 nestedArray[*]
的任一成員等於 2
或 3
:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"in": [ 2, 3 ]
}
},
"greaterOrEquals": 1
}
},
"equals": 2
}
反覆運算 | 選取的值 | 巢狀計數評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] 包含 2 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] 包含 3 =>true |
由於 objectArray[*]
的兩個成員都有包含 2
或 3
的子陣列 nestedArray[*]
,因此外部計數運算式會傳回 2
。
注意
巢狀欄位計數運算式只能參考巢狀陣列。 例如,參考 Microsoft.Test/resourceType/objectArray[*]
的計數運算式可以有以巢狀陣列 Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
為目標的巢狀計數,但不能有以 Microsoft.Test/resourceType/stringArray[*]
為目標的巢狀計數運算式。
使用範本函式存取目前的陣列成員
使用範本函式時,請使用 current()
函式來存取目前陣列成員的值或其任何屬性的值。 若要存取目前陣列成員的值,請將 count.field
中所定義的別名或任何其子別名作為引數傳遞至 current()
函式。 例如:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
"like": "value*"
}
},
"equals": 2
}
反覆運算 | current() 傳回值 |
where 評估結果 |
---|---|---|
1 | objectArray[*] 的第一個成員的 property 值:value1 |
true |
2 | objectArray[*] 的第一個成員的 property 值:value2 |
true |
條件所在的欄位函式
只要計數運算式不在存在條件內,便可使用 field()
函式來取得目前陣列成員的值 (field()
函式一律參考 if 條件所評估的資源)。 參考評估陣列時的行為 field()
是以下列概念為基礎:
- 陣列別名會解析為從所有陣列成員選取的值集合。
- 參考陣列別名的
field()
函式會傳回含指定值的陣列。 - 參考
where
條件內計算的陣列別名會傳回集合,其中包含從目前反覆運算中評估的陣列成員所選取的單一值。
此行為代表在 where
條件中參考含 field()
函式的計數陣列成員時,其會傳回含單一成員的陣列。 雖然此行為可能不直觀,但與陣列別名會一律傳回指定屬性集合的概念一致。 以下是範例:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
}
},
"equals": 0
}
反覆運算 | 運算式值 | where 評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] =>"a" [field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "a" ] |
false |
2 | Microsoft.Test/resourceType/stringArray[*] =>"b" [field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "b" ] |
false |
3 | Microsoft.Test/resourceType/stringArray[*] =>"c" [field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "c" ] |
false |
因此,當需要使用 field()
函式存取計數陣列別名時,做法是使用 first()
範本函式加以包裝:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
}
}
}
反覆運算 | 運算式值 | where 評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] =>"a" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"a" |
true |
2 | Microsoft.Test/resourceType/stringArray[*] =>"b" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"b" |
true |
3 | Microsoft.Test/resourceType/stringArray[*] =>"c" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"c" |
true |
如需實用範例,請參閱欄位計數範例。
修改陣列
在建立或更新期間,append 和 modify 會改變資源上的屬性。 使用陣列屬性時,這些效果的行為取決於作業是否嘗試修改 [*] 別名:
注意
搭配別名使用 modify
效果目前為預覽狀態。
Alias | 影響 | 結果 |
---|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
append |
若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify 含 add 作業 |
若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify 含 addOrReplace 作業 |
若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列或取代現有陣列。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
append |
Azure 原則會附加效果詳細資料中指定的陣列成員。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify 含 add 作業 |
Azure 原則會附加效果詳細資料中指定的陣列成員。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify 含 addOrReplace 作業 |
Azure 原則會移除所有現有的陣列成員,並附加效果詳細資料中指定的陣列成員。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
append |
Azure 原則會將值附加至每個陣列成員的 action 屬性。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify 含 add 作業 |
Azure 原則會將值附加至每個陣列成員的 action 屬性。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify 含 addOrReplace 作業 |
Azure 原則會附加或取代每個陣列成員的現有 action 屬性。 |
如需詳細資訊,請參閱附加範例。
其他 [*] 別名範例
建議您使用欄位計數運算式來檢查要求內容中陣列成員的「全部」或「任一」成員是否符合條件。 不過,針對某些簡單的條件,您可以使用欄位存取子搭配陣列別名來達成相同的結果,如參考陣列成員集合中所述。 此模式在超過允許計數運算式限制的原則規則中非常實用。 以下是常見使用案例的範例:
下列案例資料表的範例原則規則:
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
下列情節資料表的 ipRules 陣列如下所示:
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
針對下列每個條件範例,將 <field>
取代為 "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
。
下列結果是條件和範例原則規則和上述現有值陣列的組合結果:
Condition | 結果 | 案例 | 說明 |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Nothing | 無相符 | 一個陣列元素會評估為 false (127.0.0.1 != 127.0.0.1),另一個為 true (127.0.0.1 != 192.168.1.1),因此 notEquals 條件是 false 且不會觸發效果。 |
{<field>,"notEquals":"10.0.4.1"} |
原則效果 | 無相符 | 這兩個陣列元素會評估為 true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1),因此 notEquals 條件是 true 並觸發效果。 |
"not":{<field>,"notEquals":"127.0.0.1" } |
原則效果 | 一或多個作業 | 一個陣列元素會評估為 false (127.0.0.1 != 127.0.0.1),另一個為 true (127.0.0.1 != 192.168.1.1),因此 notEquals 條件是 false。 邏輯運算子會評估為 true (not false),因此會觸發效果。 |
"not":{<field>,"notEquals":"10.0.4.1"} |
Nothing | 一或多個作業 | 這兩個陣列元素會評估為 true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1),因此 notEquals 條件是 true。 邏輯運算子會評估為 false (not true),因此不會觸發效果。 |
"not":{<field>,"Equals":"127.0.0.1"} |
原則效果 | 不是全部相符 | 一個陣列元素會評估為 true (127.0.0.1 == 127.0.0.1),另一個為 false (127.0.0.1 == 192.168.1.1),因此 Equals 條件是 false。 邏輯運算子會評估為 true (not false),因此會觸發效果。 |
"not":{<field>,"Equals":"10.0.4.1"} |
原則效果 | 不是全部相符 | 這兩個陣列元素都評估為 false (10.0.4.1 == 127.0.0.1 和 10.0.4.1 == 192.168.1.1),因此 Equals 條件為 false。 邏輯運算子會評估為 true (not false),因此會觸發效果。 |
{<field>,"Equals":"127.0.0.1"} |
Nothing | 全部相符 | 一個陣列元素會評估為 true (127.0.0.1 == 127.0.0.1),另一個為 false (127.0.0.1 == 192.168.1.1),因此 Equals 條件是 false 且不會觸發效果。 |
{<field>,"Equals":"10.0.4.1"} |
Nothing | 全部相符 | 這兩個陣列元素都評估為 false (10.0.4.1 == 127.0.0.1 和 10.0.4.1 == 192.168.1.1),因此 Equals 條件是 false 且不會觸發效果。 |
下一步
- 在 Azure 原則範例檢閱範例。
- 檢閱 Azure 原則定義結構。
- 檢閱了解原則效果。
- 了解如何以程式設計方式建立原則。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: