gpt4 book ai didi

azure - Pester/PowerShell 输出应匹配/包含 $a 或 $b

转载 作者:行者123 更新时间:2023-12-05 03:59:18 26 4
gpt4 key购买 nike

我想要 Pester 检查公共(public) IP 是否连接到 $edge00$edge01 NIC

# id of the Get-AzPublicIpAddress output will = "/subscriptions/asdf-asdf-asdf/resourceGroups/RG-ASDF-FW/providers/Microsoft.Network/networkInterfaces/FW-ASDF-EDGE-00-NIC1/ipConfigurations/FW-ASDF-EDGE-ASDF"

$edge00 = "FW-ASDF-EDGE-00-NIC1"
$edge01 = "FW-ASDF-EDGE-01-NIC1"

# this will fail
(Get-AzPublicIpAddress -Name "PIP-FW-ASDF-EDGE-UNTRUST" -ResourceGroupName "RG-ASDF-FW").IpConfiguration.Id | Should -Match ($edge00 -or $edge01)

# this will work
(Get-AzPublicIpAddress -Name "PIP-FW-ASDF-EDGE-UNTRUST" -ResourceGroupName "RG-ASDF-FW").IpConfiguration.Id | Should -Match $edge00

我已经做了相当多的搜索,但我无法找到通过普通 PowerShell 命令或 Pester 来检查字符串 ($id) 是否包含 string1 ($ edge00) 或 string2 ($edge01)

请问大家有什么想法吗?

最佳答案

boxdog建议使用 Should-Match 参数regular expression使用交替 (|) 来匹配多个子字符串中的任何一个,就像 PowerShell 的 -match 运算符一样:

$edge00 = 'bar'
$edge01 = 'foo'

# Each input must contain substring 'bar' or substring 'foo'
'food', 'rebar' | Should -Match "$edge00|$edge01' # OK

需要注意的是,如果您的子表达式来自变量,就像您的情况一样,通常最好使用 [regex]::Escape() 来确保它们被视为 文字:
“$([regex]::Escape($edge00))|$([regex]::Escape($edge01))”
这里并不是绝对必要的,但在您事先不知 Prop 体变量内容的情况下需要记住这一点。
此外,您可能希望匹配受到更多限制以排除误报:“/$([regex]::Escape($edge00))/|/$([regex]::Escape($edge01))/”

<小时/>

如果您想匹配整个字符串,字面上,请使用-BeIn,其工作方式类似于PowerShell的-in 运算符:

# Each input must be either 'rebar' or 'food'
'food', 'rebar' | Should -BeIn rebar, food # OK
<小时/>

就您而言,您可以预处理您的输入以提取感兴趣的标记,然后允许您使用-BeIn,而不必担心转义或误报;一个简化的例子:

$edge00 = 'FW-ASDF-EDGE-00-NIC1'
$edge01 = 'FW-ASDF-EDGE-01-NIC1'

# Extract the 3rd-from-last token from each path, which must either
# be $edge00 or $edge01
('/.../.../networkInterfaces/FW-ASDF-EDGE-00-NIC1/more/stuff',
'/.../.../networkInterfaces/FW-ASDF-EDGE-01-NIC1/more/stuff' -split '/')[-3] |
Should -BeIn $edge00, $edge01 # OK

这种方法还不需要单独的变量,因为您可以定义单个数组变量 - $edges = 'FW-ASDF-EDGE-00-NIC1', 'FW-ASDF-EDGE-01- NIC1' - 并将其传递给 -BeIn

关于azure - Pester/PowerShell 输出应匹配/包含 $a 或 $b,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57324857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com