- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要 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/
我是一名优秀的程序员,十分优秀!