共用方式為


對於 Azure 資源編寫陣列屬性的原則

Azure Resource Manager 屬性通常會定義為字串和布林值。 存在一對多關聯性時,複雜屬性會改為定義為陣列。 在 Azure 原則中,能夠以多種不同的方式使用陣列:

  • 要提供多個選項的定義參數類型
  • 使用條件或的一部分原則規則notInin
  • 計算陣列成員符合條件之陣列成員數目的原則規則的一部分。
  • appendmodify 效果下,更新現有的陣列

本文涵蓋 Azure 原則的每個使用方式,並提供數個範例定義。

參數陣列

定義參數陣列

將參數定義為陣列,可在需要一個以上的值時,允許原則彈性。 此原則定義允許參數 allowedLocations 的任何單一位置,並預設為 eastus2

"parameters": {
  "allowedLocations": {
    "type": "string",
    "metadata": {
      "description": "The list of allowed locations for resources.",
      "displayName": "Allowed locations",
      "strongType": "location"
    },
    "defaultValue": "eastus2"
  }
}

如同type字串,指派原則時只能設定一個值。 如果指派此原則,則範圍內的資源只能在單一 Azure 區域中使用。 大部分的原則定義都必須允許已核准的選項清單,例如允許 eastus2eastuswestus2

若要建立原則定義以允許多個選項,請使用 陣列 type。 相同的原則可以改寫如下:

"parameters": {
  "allowedLocations": {
    "type": "array",
    "metadata": {
      "description": "The list of allowed locations for resources.",
      "displayName": "Allowed locations",
      "strongType": "location"
    },
    "defaultValue": [
      "eastus2"
    ],
    "allowedValues": [
      "eastus2",
      "eastus",
      "westus2"
    ]
  }
}

注意

儲存原則定義之後, type 就無法變更參數上的 屬性。

這個新的參數定義會在原則指派期間接受一個以上的值。 定義陣列屬性 allowedValues 后,指派期間可用的值會進一步限制為預先定義的選擇清單。 使用 是選擇性的 allowedValues

於指派期間將值傳遞給參數陣列

當您透過 Azure 入口網站 指派原則時,陣列的參數type會顯示為單一文本框。 提示說 Use ; to separate values. (e.g. London;New York)。 若要將 eastus2eastuswestus2 允許的位置值傳遞給參數,請使用下列字串:

eastus2;eastus;westus2

使用 Azure CLI、Azure PowerShell 或 REST API 時,參數值的格式會不同。 這些值會透過同時包含參數名稱的 JSON 字串傳遞。

{
  "allowedLocations": {
    "value": [
      "eastus2",
      "eastus",
      "westus2"
    ]
  }
}

若要將此字串與每個 SDK 搭配使用,請使用下列命令:

在條件中使用陣列

In 和 notIn

innotIn 條件只適用於陣列值。 它們會檢查陣列中是否有值。 陣列可以是常值 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。

若要讓先前的條件更泛型,請使用 parameters 參考,而不是常值數位:

{
  "count": {
    "value": "[parameters('patterns')]",
    "name": "pattern",
    "where": {
      "field": "name",
      "like": "[current('pattern')]"
    }
  },
  "greater": 0
}

value count當表達式不在任何其他count運算式之下時,是選擇性current()的,count.name而且函式可以不使用任何自變數:

{
  "count": {
    "value": "[parameters('patterns')]",
    "where": {
      "field": "name",
      "like": "[current()]"
    }
  },
  "greater": 0
}

value count也支援複雜對象的陣列,允許更複雜的條件。 例如,下列條件會為每個名稱模式定義所需的標籤值,並檢查資源名稱是否符合該模式,但沒有必要的標籤值:

{
  "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_"
    }
    

欄位條件具有隱含 allOf 的行為。 如果別名代表值的集合,則會檢查所有個別值是否符合條件。 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"時,下列條件才會成立。

{
  "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、 、 234

當您在範例資源內容上使用 函 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 條件。 指定 時count,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[*]
=,>12
false
2 Microsoft.Test/resourceType/objectArray[*].property=>"value2" Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
=,>34
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[*] =>12 nestedArray[*] 有 2 個成員 =>true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>34 nestedArray[*] 有 2 個成員 =>true

由於 objectArray[*] 的兩個成員都有含兩個成員的子陣列 nestedArray[*],因此外部計數運算式會傳回 2

更複雜的範例:檢查 objectArray[*] 陣列是否只有兩個成員,其中 nestedArray[*] 的任一成員等於 23

{
  "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[*] =>12 nestedArray[*] 包含 2 =>true
2 Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>34 nestedArray[*] 包含 3 =>true

由於 objectArray[*] 的兩個成員都有包含 23 的子陣列 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

如需實用範例,請參閱欄位計數範例

修改陣列

在建立或更新期間,appendmodify 會改變資源上的屬性。 當您使用陣列屬性時,這些效果的行為取決於作業是否嘗試修改 [*] 別名:

注意

搭配別名使用 modify 效果目前為預覽狀態。

Alias 影響 結果
Microsoft.Storage/storageAccounts/networkAcls.ipRules append 若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。
Microsoft.Storage/storageAccounts/networkAcls.ipRules modifyadd 作業 若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。
Microsoft.Storage/storageAccounts/networkAcls.ipRules modifyaddOrReplace 作業 若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列或取代現有陣列。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] append Azure 原則會附加效果詳細資料中指定的陣列成員。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modifyadd 作業 Azure 原則會附加效果詳細資料中指定的陣列成員。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modifyaddOrReplace 作業 Azure 原則會移除所有現有的陣列成員,並附加效果詳細資料中指定的陣列成員。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action append Azure 原則會將值附加至每個陣列成員的 action 屬性。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modifyadd 作業 Azure 原則會將值附加至每個陣列成員的 action 屬性。
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action modifyaddOrReplace 作業 Azure 原則會附加或取代每個陣列成員的現有 action 屬性。

如需詳細資訊,請參閱附加範例

其他別名範例

建議使用欄位計數表示式來檢查要求內容中的陣列成員是否符合allOfanyOf條件。 對於某些簡單的條件,您可以使用字段存取子搭配陣列別名來達成相同的結果,如參考數位成員集合中所述。 此模式在超過允許 count 表達式限制的原則規則中很有用。 以下是常見使用案例的範例:

下列案例數據表的範例原則規則:

"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(不是 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(不是 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(不是 false),因此會觸發效果。
"not":{<field>,"Equals":"10.0.4.1"} 原則效果 不是全部相符 這兩個陣列元素都會評估為 false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1),因此 Equals 條件為 false。 邏輯運算符會評估為 true(不是 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 and 10.0.4.1 == 192.168.1.1),因此 Equals 條件為 false 且不會觸發效果。

下一步