我已经自动化了在Azure Application Gateway WAF上创建自定义规则的过程。但是,每当我更新任何现有的自定义规则时,它都会自动删除所有其他自定义规则。我无法在Azure PowerShell文档中找到用于更新单个自定义规则的特定命令。我也向微软提出了这个问题,他们已经确认该命令在Azure PowerShell中不可用。
在我的研究中,我发现我们可以通过使用“.Add”和“.Remove”操作来实现这一点。但是,我在尝试这样做时遇到了一些错误。
目前,我正在尝试两种方法:
1.向特定的现有自定义规则添加新的恶意IP。当我尝试执行此操作时,收到以下错误消息:
PS C:\Users\japuthiyakath> $policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $policyRG
PS C:\Users\japuthiyakath> (($policy.CustomRules | Where-Object {$_.Name -match "IPRestrict"}).MatchConditions.MatchValues).Add('2.3.6.9')
MethodInvocationException: Exception calling "Add" with "1" argument(s): "Collection was of a fixed size."
1.从防火墙策略中删除IPRestrict自定义规则,并用修改后的自定义规则替换它。使用.RemoveAt(0)
的方法工作得很好,但我们可能会在确定要删除的对象的确切位置时遇到困难。
我尝试使用下面提供的命令删除该对象,但尽管没有任何错误,该对象仍然不受影响,也没有被删除。
PS C:\Users\japuthiyakath> ($policy.CustomRules | Where-Object {$_.Name -match "IPRestrict"}).Remove
供参考;
2条答案
按热度按时间bvn4nwqk1#
顺便说一句:下面使用
Where-Object Name -eq IPRestrict
而不是Where-Object {$_.Name -match "IPRestrict"}
来标识感兴趣的策略:-eq
确保了文字、全值匹配,而-match
还查找 * 子字符串 *(通过regex模式)。另外,省略{ ... }
和$_
是simplified syntax的应用。回复1:
.MatchConditions
和.MatchValues
属性包含 lists(System.Collections.Generic.List
1`类型的类似数组的集合)。.MatchConditions.MatchValues
返回一个 * 常规.NET数组 *(System.Array
),其中包含所有.MatchCondition
列表条目中的.MatchValues
列表条目。IList
接口的上下文中实现.Add()
方法。.MatchValues
中的 list(它 * 确实 * 支持.Add()
),您要么需要确定要针对哪个特定的.MatchConditions
列表条目,要么必须迭代 * 所有 *.MatchConditions
列表条目并在每个 * 上调用.Add()
*(假设这是有意义的);例如:回复2:
[
System.Collections.Generic.List
1](https://learn.microsoft.com/en-US/dotnet/api/System.Collections.Generic.List-1)类型有一个
.Remove()`方法,它允许你传递 object 从列表中删除,而不必知道它在列表中的 * 索引 *:w8rqjzmb2#
分辨率:
要更新Web应用程序防火墙(WAF)的现有策略,请使用以下命令: